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

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. 这道题是一道典型的大数问题,使用数组模拟法来模拟手工除法
    在这里插入图片描述
  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;
} 
posted @ 2020-06-20 22:28  LanceHansen  阅读(34)  评论(0)    收藏  举报