C++题目及答案——高级篇(5)

题目名称
高精度除法运算

题目描述
输入两个高精度数a,b(长度不超过100位),输出a/b的值。

输入描述
输入两个高精度数a,b(长度不超过100位)

输出描述
输出a/b的值

输入样例
8888888888888888
666666666666

输出样例
13333

-----------------------------------------------请认真思考后查看源码----------------------------------------------------

-----------------------------------------------请认真思考后查看源码----------------------------------------------------

-----------------------------------------------请认真思考后查看源码----------------------------------------------------

完整代码

#include
#include

using namespace std;

int a[1001], b[1001], c[1001];

void init(int a[]) {
	string s;
	cin >> s;
	a[0] = s.length();
	for (int i=1; i<=a[0]; i++) {
		a[i]=s[a[0] - i] - '0';
	}
} 

void numcpy(int p[], int q[],int det) {
	for (int i=1; i<=p[0]; i++) {
		q[i+det-1]=p[i];
	}
	q[0] = p[0]+det-1;
} 

int compare(int a[], int b[]) {
	if (a[0]>b[0]) {
		return 1;
	}
	if (a[0]<b[0]) {
		return -1;
	}
	for (int i=a[0]; i>0; i--) {
		if (a[i]>b[i]) {
			return 1;
		}
		if (a[i]<b[i]) {
			return -1;
		}
	}
	return 0;
} 

void jian(int a[], int b[]) {
	int flag;
	flag = compare(a,b);
	if (flag == 0) {
		a[0]=0;
		return;
	}
	if (flag == 1) {
		for (int i=1; i<=a[0]; i++) {
			if (a[i]<b[i]) {
				a[i+1]--;
				a[i]+=10;
			}a[i]-=b[i];
		}
		while (a[0]>0 && a[a[0]]==0) {
			a[0]--;
		}
		return;
	}
} 

void print(int a[]) {
	if (a[0] == 0) {
		cout << 0 << endl;
		return;
	}
	for (int i=a[0]; i>0; i--) {
		cout << a[i];
	}
	cout << endl;
	return;
} 

void chugao(int a[], int b[], int c[]) {
	int tmp[1001];
	c[0] = a[0] - b[0] + 1;
	for (int i=c[0]; i>0; i--) {
		memset(tmp, 0, sizeof(tmp));
		numcpy(b, tmp, i);
		while (compare(a, tmp) >= 0) {
			c[i]++;
			jian(a, tmp);
		}
	}
	while(c[0]>0 && c[c[0]] == 0) {
		c[0]--;
	}
	
	return;
} 

int main(){
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	init(a);
	init(b);
	chugao(a,b,c);
	print(c);
	return 0;
}

代码好长呀,手都敲麻了

你可能感兴趣的:(C++题目及答案,c++,高精度)