PAT (Basic Level) Practice (中文)1017 A除以B (20分)

时间:2023-12-05 11:04:26

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

总结

  1. 这道题是一道典型的大数问题,使用数组模拟法来模拟手工除法
    PAT (Basic Level) Practice (中文)1017 A除以B (20分)
  2. 第二个测试点是测试当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;
}