1169:大整数减法
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 13400 通过数: 7669
【题目描述】
求两个大的正整数相减的差。
【输入】
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
一行,即所求的差。
【输入样例】
9999999999999999999999999999999999999 9999999999999
【输出样例】
9999999999999999999999990000000000000
#include<bits/stdc++.h>
using namespace std;
int a[2005],b[2005],c[2005],la,lb,lc=0,x=0;
string a1,b1,tmp;
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
getline(cin, a1);
getline(cin, b1);
if(a1==b1) {
cout<<0<<endl; // 如果两个数相等,输出0
return 0;
}
la=a1.size();
lb=b1.size();
// 判断是否后面的数比前面的数要大,如果大,输出负号并且换位置
if(la<lb||(la==lb&&a1<b1)){
cout<<"-";
//使得a1,b1交换
swap(a1,b1);
}
for(int i=0;i<la;i++){
a[la-i-1]=a1[i]-'0';
}
for(int i=0;i<lb;i++){
b[lb-i-1]=b1[i]-'0';
// cout<<b[la-i-1];
}
// for(int i=0;i<lb;i++){
// cout<<b[i];
// }
// cout<<endl;
while(lc<max(la,lb)){
if(a[lc]<b[lc]){
a[lc]+=10;
a[lc+1]--;
}
c[lc]=a[lc]-b[lc];
lc++;
}
while(c[lc]==0){
lc--;
}
for(int i=lc;i>=0;i--){
cout<<c[i]; // 倒序输出,并且输出到0的位置
}
return 0;
}