A除以B 20 (C語言)

2021-08-22 11:47:56 字數 1297 閱讀 5009

題目描述

本題要求計算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空格...