1017 A除以B (20分)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
总结
- 这道题是一道典型的大数问题,使用数组模拟法来模拟手工除法
- 第二个测试点是测试当Q为0时的情况,输入样例
1 2
,此时cnt为0,需要单独增加条件判断输出0
#include <stdio.h>
int
main( int argc, char **argv )
{
int i;
int b, r;
int cin;
int cnt = -1;
int n[1000];
for( i = 0; i < 1000; i++ ){
char temp;
scanf("%c", &temp);
if( temp != ' ' ){
n[i] = temp - '0';
cnt++;
}else{
break;
}
}
scanf("%d", &b);
for( i = 0, cin = n[0]; i < cnt; i++ ){
int c_tmp = cin;
cin = ( cin * 10 + n[i+1] ) % b;
n[i+1] = ( c_tmp * 10 + n[i+1] ) / b;
}
for( i = 1; i <= cnt; i++ ){
printf("%d", n[i]);
}
if( cnt == 0 ){
printf("0");
}
printf(" %d", cin);
return 0;
}