竖式除法【转】

题目描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

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

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

输入样例:
123456789050987654321 7



输出样例:
17636684150141093474 3

思路

1、本题是高精度除法,1000位的数远远超过了整型的范围,所以我们需要选择字符数组来存储 A ,并且通过字符数组来存储 Q 。

2、由于已经限定 B 为 1 位整数,所以我们可以从 A 的最高位逐位进行除法,并将余数乘 10 加到下一位上。

3、注意存储时是数字字符,所以我们需要将数字字符转换为数字。

4、不要忘了在 Q 后添加 ‘\0’ 作为字符串的结束。

5、注意当 A 小于 B 时的情况。

AC代码

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
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
char A[1000], Q[1000];
int B, R = 0;
int i, j, len;

scanf("%s%d", A, &B);
len = strlen(A);
for (i = 0, j = 0; j < len; i++, j++)
{
Q[i] = (A[j] + 10 * R - '0') / B + '0';
R = (A[j] + 10 * R - '0') % B;
if (i == 0 && Q[i] == '0')
{
i--;
}
}
Q[i] = '\0';
len = strlen(Q);
if (!len)
{
printf("0 %d\n", R);
}
else
{
printf("%s %d\n", Q, R);
}


return 0;
}

https://blog.csdn.net/shiawaseli/article/details/89740352

凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条