問題是簡單的高精度除法問題:
本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你需要輸出商數 Q 和餘數 R,使得 A=B×Q+R 成立。
輸入格式:
輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。
輸出格式:
在一行中依次輸出 Q 和 R,中間以 1 空格分隔。
輸入樣例:
123456789050987654321 7
輸出樣例:
17636684150141093474 3
代碼爲:
#include<bits/stdc++.h>
using namespace std;
struct bign{
int digit[2000];
int len;
bign()
{
memset(digit, 0, sizeof(digit));
len = 0;
}
};
bign change(char str[])
{
bign a;
int L = strlen(str);
for(int i = 0; i < L; i++)
a.digit[i] = str[L - i - 1] - '0';
a.len = L;
return a;
}
bign Q;
int R;
void divide(bign a, int b)
{
Q.len = a.len;
R = 0;
for(int i = a.len - 1; i >= 0; i--)
{
R = R * 10 + a.digit[i];
if(R < b)
{
Q.digit[i] = 0;
}
else
{
Q.digit[i] = R / b;
R = R % b;
}
}
while(Q.len - 1 >= 1 && Q.digit[Q.len - 1] == 0)
Q.len--;
}
void print(bign c)
{
for(int i = c.len - 1; i >= 0; i--)
printf("%d", c.digit[i]);
}
int main()
{
char s[2000];
int b;
scanf("%s%d", s, &b);
bign a = change(s);
divide(a, b);
print(Q);
printf(" %d\n", R);
return 0;
}