PAT B1017

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入格式:

输入在1行中依次给出A和B,中间以1空格分隔。

输出格式:

在1行中依次输出Q和R,中间以1空格分隔。

输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdio.h"
//#include "math.h"
#include "string.h"
//#include "iostream"
//#include "stdlib.h"
#include "algorithm"
using namespace std;
//typedef long long LL;
const int maxn = 100010;
struct bign{
int d[1000],len;
bign(){
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(char str[]){
bign a;
a.len = (int)strlen(str);
for (int i = 0; i < a.len ; i++) {
a.d[i] = str[a.len - 1 - i] - '0';
}
return a;
}
bign divide(bign a, int b, int& r){
bign c;
c.len = a.len;
for (int i = a.len - 1; i >= 0; i--) {
r = r * 10 + a.d[i];//和上一位遗留的余数组合
if (r < b) c.d[i] = 0;//不够除,该位为0
else{
c.d[i] = r / b;//商
r = r % b;//获得新的余数
}
}
while (c.len - 1 >= 1 && c.d[c.len - 1] == 0){
c.len--;
}
return c;
}
void print(bign a){
//输出bign
for (int i = a.len -1; i >= 0; i--) {
printf("%d", a.d[i]);
}
}
int main(){
char stra[1010];
int b, q, r;
scanf("%s%d", stra, &b);
bign a,c;
a = change(stra);
c = divide(a, b, r);
print(c);
printf(" %d\n", r);

return 0;
}