【1169】大整数减法

【题目描述】
       求两个大的正整数相减的差。
【输入】
       共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
       一行,即所求的差。
【输入样例】
       9999999999999999999999999999999999999
       9999999999999
【输出样例】
       9999999999999999999999990000000000000
【参考程序】

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

#define SIZE 2001

int main() {
	char a1[SIZE], b1[SIZE], t[SIZE];
	int x, lena, lenb, a[SIZE], b[SIZE];
	
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));

	gets(a1);
	gets(b1);
	if ((strlen(a1)<strlen(b1)) || ((strlen(a1)==strlen(b1)) && (strcmp(a1,b1)<0))) {
		strcpy(t, a1);					// 判断如果减数比被减数大,则交换两者,并输出“-” 
		strcpy(a1, b1);
		strcpy(b1, t);
		cout << "-";
	}
	
	lena = strlen(a1);
	lenb = strlen(b1);
	for (int i=0; i<lena; i++) {
		a[lena-i] = a1[i] - 48;			// 字符串被减数 存入 整型数组a,且倒序存储 
	}
	for (int i=0; i<lenb; i++) {
		b[lenb-i] = b1[i] - '0';		// 字符串减数 存入 整型数组b,且倒序存储 
	}
	
	for (int i=1; i<=lena; i++) {
		a[i] -= b[i];					// 将被减数的每一位分别减去减数的每一位
		if (a[i] < 0) {					// 如果不够减,就向前一位借10 
			a[i] += 10;					 
			a[i+1]--;
		} 
	}
	while (a[lena] == 0) {				// 去掉前面多余的0 
		lena--;
	} 
	
	for (int i=lena; i>=1; i--) {
		cout << a[i];
	} 
	
	return 0;
}

发布了49 篇原创文章 · 获赞 0 · 访问量 1035

猜你喜欢

转载自blog.csdn.net/developer_zhb/article/details/105009309