题目
本题要求计算 A/B
,其中 A
是不超过 1000 位的正整数,B
是 1 位正整数。你需要输出商数 Q
和余数 R
,使得 A=B×Q+R
成立。
输入格式:
输入在一行中依次给出 A
和 B
,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q
和 R
,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路
- 模拟笔算除法;
- 需要注意的是除数是个
1位数
,所以进位最多是2位,然后输出的结果前面也最多只有1个0,不要把问题想复杂了。
代码
#include<stdio.h>
int main()
{
char A[1001];
int B = 0, remainder = 0, carrybit = 0;
scanf("%s%d", A, &B);
for(int i = 0; A[i]; i++)
{
carrybit = remainder * 10 + A[i] - '0';
A[i] = carrybit / B + '0';
remainder = carrybit % B;
}
// 1. *p++ == '0' 为了除掉前面的0
// 2. *p 防止结果就是 0 这种情况
char *p = A;
while( *p++ == '0' && *p);
printf("%s %d\n", p-1, remainder);
return 0;
}
除掉结果前面的0
下面的写法更好:
char *p = A;
while(A[0] == '0' && A[1] != '\0') P++;
因为前面最多只有一个0
,而且最好不要在逻辑运算里面加计数的运算符,容易出错。
心得
- 除掉数字前面的0的方法
char *p = A;
while(A[i] == '0' && A[i + 1] != '\0'){i++; p++;}
- 有空可以写写如果B不只是
1位数
的情况