題目描述
本題要求計算a/b,其中a是不超過1000位的正整數,b是1位正整數。你需要輸出商數q和餘數r,使得a = b * q + r成立。
輸入描述:
輸入在1行中依次給出a和b,中間以1空格分隔。
輸出描述:
在1行中依次輸出q和r,中間以1空格分隔。
輸入例子:
123456789050987654321 7
輸出例子:
17636684150141093474 3
這是pat上面的一道題,我今天刷到的。說實話,剛開始看這道題的時候,首先想到的是直接相除,但是就算使用最大的long long ,也遠遠到達不了1000位,這時候我們就要換一種想法了。我們可以將這樣的大數看做乙個字串,就可以儲存起來了,但是該如何相除並保留餘數尼
假設被除數div為7,餘數我們記為 ret,當這個除數為12345時,這恐怕乙個小學生都知道如何算:
第一步:1/7等於0,餘數為1,即ret=1
第二步:讓讓一步的餘數(1)乘以10,再加上2,即12/7 等於1,餘數為5,即ret = 5
第三步:讓讓一步的餘數(5)乘以10,再加上3,即53/7 等於7,餘數為5,即ret = 4
第四步:讓讓一步的餘數(4)乘以10,再加上4,即44/7 等於6,餘數為2,即ret = 2
第五步:讓讓一步的餘數(2)乘以10,再加上5,即25/7 等於3,餘數為4,即ret = 4
則最終結果12345/7 等於1763餘4
不管數再長,都沒有問題
#include
#include
#define max 1001
int main()
;int div = 0;
int len = 0;
int ret = 0;
scanf("%s", arr);
scanf("%d", &div);
len = (int)strlen(arr);
for (int i = 0; i < len; i++)
ret = (ret * 10 + arr[i] - '0') % div; //記錄上一步的餘數
}if (len == 1 && (arr[0] - '0') < div) //只有一位數並且小於被除數
printf(" %d", ret);
return
0; }
結果:
C語言 1017 A除以B 20分
本題要求計算 a b,其中 a 是不超過 1000 位的正整數,b 是 1 位正整數。你需要輸出商數 q 和餘數 r,使得 a b q r 成立。輸入在一行中依次給出 a 和 b,中間以 1 空格分隔。在一行中依次輸出 q 和 r,中間以 1 空格分隔。123456789050987654321 7...
B1017 A除以B 20 分 (思路 注意)
本題要求計算 a b,其中 a 是不超過 1000 位的正整數,b 是 1 位正整數。你需要輸出商數 q 和餘數 r,使得 a b q r 成立。輸入格式 輸入在一行中依次給出 a 和 b,中間以 1 空格分隔。輸出格式 在一行中依次輸出 q 和 r,中間以 1 空格分隔。輸入樣例 12345678...
PAT 乙級 1017 A除以B(20)
時間限制 100 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 本題要求計算a b,其中a是不超過1000位的正整數,b是1位正整數。你需要輸出商數q和餘數r,使得a b q r成立。輸入格式 輸入在1行中依次給出a和b,中間以1空格...