1254: 【基础】高精度减法

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:40 解决:10

题目描述

高精度减法,求a-b。a,b都是不超过500位的非负整数。

输入

两个非负整数,每行一个。

输出

一个整数,代表两个整数相减之后的结果。

样例输入 复制

33333333333333333333333333333333333333333
22222222222222222222222222222222222222222

样例输出 复制

11111111111111111111111111111111111111111

提示

#include<bits/stdc++.h>
using namespace std;
#define maxn 520
int a[maxn],b[maxn],c[maxn];
int main(){
    string A,B;
    cin>>A>>B;
    int lena,lenb,len;
    lena=A.length();
    lenb=B.length();
    if (A==B) {
    	cout<<0;
    	return 0;
	}
    len=max(lena,lenb);
    int flag=0;    
    if (A>B) {
        flag=1;
        for (int i=A.length()-1;i>=0;i--)
            a[lena-i]=A[i]-'0';
        for (int i=B.length()-1;i>=0;i--)
            b[lenb-i]=B[i]-'0';    	
	}else {
        flag=-1;
        for (int i=B.length()-1;i>=0;i--)
            a[lenb-i]=B[i]-'0';
        for (int i=A.length()-1;i>=0;i--)
            b[lena-i]=A[i]-'0';   		
	}

	for (int i=1;i<=len;i++) {
		if (a[i]>=b[i]) {
		    c[i]=a[i]-b[i];			
		}else {
			a[i+1]--;
			c[i]=a[i]+10-b[i];
		}
	}
	while (c[len]<=0)
	    len--;
	if (flag==-1)
	    cout<<"-";
	for (int i=len;i>=1;i--)
	    cout<<c[i];     
	return 0;
}