PAT:B1017 A除以B(20 分)

PAT:B1017 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

代码:

#include
#include
#include
using namespace std;
// 构造体 
struct Num{
	int d[1010];
	int len;
	Num(){
		len = 0;
		memset(d, 0, sizeof(d));
	}
}temp, last;

// 转换 
Num make(char a[ ]) {
	Num c;
	c.len = strlen(a);
	for(int i = 0; i < c.len; i++) {
		c.d[i] = a[c.len - i - 1] - '0';
	}
	return c;
}

// 除数
Num div(Num a, int b, int& r) {
	Num c;
	c.len = a.len;
	for(int i = a.len - 1; i >= 0; i--) {
		r = r * 10 + a.d[i];
		c.d[i] = r / b;
		r = r % b;
	}
	while(c.len - 1 >= 1 && c.d[c.len - 1] == 0) {
		c.len--;
	}
	return c;
}

// 大整数的输出
void print(Num a) {
	for(int i = a.len-1; i >= 0; i--) {
		printf("%d", a.d[i]);
	}
} 
 
int main() {
	// 此题目是大整数余数
	// 1. 构造体	2. 将输入的数字转换成大整数
	// 3. 开始取余 
	char a[1010];
	int q, r = 0;
	Num b, c;
	scanf("%s %d", a, &q);
	b = make(a);
	c = div(b, q, r);
	print(c);
	printf(" %d", r);
	return 0;
}

 

你可能感兴趣的:(PAT-Basic(乙级))