大整数减法(高精度运算)

描述

求两个大的正整数相减的差。

格式

输入格式

共2行,第1行是被减数a,第2行是减数b(a 不小于 b)。每个大整数不超过200位,不会有多余的前导零。

输出格式

一行,即所求的差。

样例

输入样例

9999999999999999999999999999999999999
9999999999999

输出样例

9999999999999999999999990000000000000

限制

时间限制: 1000 ms

内存限制: 65536 KB

#include <bits/stdc++.h>
using namespace std;

int main()
{   
	string s1, s2;
	getline (cin, s1);
	getline (cin, s2);
	int len1 = s1.length();
	int len2 = s2.length();
	int j=0;
	int a1[len1], a2[len2], a3[len1];
	for (int i=len1-1; i>=0; i--) {
		a1[j++] = s1[i] - '0';
	}
	j=0;
	for (int i=len2-1; i>=0; i--) {
		a2[j++] = s2[i] - '0';
	}
	
	int count=0, tmp=0;
	for (int i=0; i<len2; i++) {
		if (a1[i] >= a2[i]) {
			a3[count++] = a1[i] - a2[i];
		} else {
			a1[i] = 10 + a1[i];
			a3[count++] = a1[i] - a2[i];
			if (a1[i+1] > 0) {
				a1[i+1] = a1[i+1] - 1;
			} else {
				for (int j=i+1; j<len1; j++) {
					if (a1[j] == 0) {
						a1[j] = 9;
					} else {
						a1[j] = a1[j] - 1;
						break; 
					} 
				}
			}
		}
	}
	for (int i=len2; i<len1; i++) {
		a3[count++] = a1[i];
	}

	tmp = count;
	for (int i=tmp-1; i>0; i--) {
		if (a3[i] == 0) {
			count--;
		} else {
			break;
		}
	}
	for (int i=count-1; i>=0; i--) {
		printf ("%d", a3[i]);
	}
    return 0;
}
发布了89 篇原创文章 · 获赞 77 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/wodemaoheise/article/details/105060257