1254: 【作】【基础】高精度减法
内存限制:16 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:43
解决: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;
}