问题 B: 大整数减法
时间限制: 1 Sec
内存限制: 128 MB
提交: 6
解决: 5
题目描述
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
样例输入
9999999999999999999999999999999999999
9999999999999
样例输出
9999999999999999999999990000000000000
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a1[202],b1[202],c1[202];
scanf("%s%s",&a1,&b1);
int a[202],b[202],c[202];
int L1=strlen(a1),L2=strlen(b1);
int i,j,k;
for(i=1;i<=L1;i++)
a[i]=a1[L1-i]-'0';
for(i=1;i<=L2;i++)
b[i]=b1[L2-i]-'0';
if(L1>L2)
{
for(i=L2+1;i<=L1;i++)
b[i]=0;
}
if(L2>L1)
{
for(i=L1+1;i<=L2;i++)
a[i]=0;
}
int L=max(L1,L2);
memset(c,0,sizeof(c));
for(int i=1;i<=L;i++)
{
c[i]=c[i]+a[i]-b[i];
if(c[i]<0)
c[i]+=10,c[i+1]--;//不够减则借10,c[i+1]--
}
bool bb=0;
for(i=L+1;i>=1;i--)
{
if(c[i])bb=1;
if(bb)printf("%d",c[i]);
}
printf("\n");
return 0;
}