PAT:B1017 A除以B

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ecloss/article/details/82183573

PAT:B1017 A除以B

本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式:

输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式:

在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

// 1. 构造体
struct bign{
	int d[1000];
	int len;
	bign() {
		len = 0;
		memset(d, 0, sizeof(d));
	}
}; 

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

// 3. 输出
void print(bign a) {
	for(int i = a.len-1; i >= 0; i--) {
		printf("%d", a.d[i]);
	}
}

// 4. 高精度与低精度的除法
bign div(bign a, int b, int& r) {
	bign 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;
}

int main() {
	char A[1000];
	int B, r = 0, Q;
	scanf("%s %d", A, &B);
	bign a = change(A);
	bign c = div(a, B, r);
	print(c);
	printf(" %d", r);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/Ecloss/article/details/82183573