PAT1017 A除以B

PAT1017 A除以B

题目

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

输入格式

输入在一行中依次给出AABB,中间以 1 空格分隔。

输出格式

在一行中依次输出QQRR,中间以 1 空格分隔。

输入样例

1
123456789050987654321 7

输出样例

1
17636684150141093474 3

思路

被除数很大,所以用字符串存好一点,除数只有一位用int,然后模拟手算除法:对每一位数都与除数相除,余数和下一位数合起来进行下一次除,直到最后一位。用递归思路比较清晰。

代码

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
//pat1017
#include <stdio.h>
#include <cstring>
char a[1000];
short b;
int chu(int yu, int wei)
{
if(!(strlen(a) - wei))
{
return yu;
}
printf("%d", (10 * yu + a[wei] - 48) / b);
int t = (10 * yu + a[wei] - 48) % b;
return chu(t, ++wei);
}

int main(int argc, char const *argv[])
{
scanf("%s %d", &a, &b);
if (strlen(a) == 1)
{
printf("%d %d\n", (a[0] - 48) / b, (a[0] - 48) % b);
return 0;
}
if(a[0] - 48 >= b)
{
printf(" %d",chu(0, 0));
}
else
{
printf(" %d", chu(a[0] - 48, 1));
}
return 0;
}
文章作者: Shengyaqingfeng
文章链接: https://creazyboyone.github.io/pat1017/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shengyaqingfeng's Blog