【每日一题Day2】大整数减法
【题目描述】
求两个大的正整数相减的差。
【输入】
共两行,被减数a和被减数b(a>b),每个大整数不超过200位,不会有多余的前导0。
【输出】
所求的差
【样例输入】
8765
67
【样例输出】
8698
【思路】
- 倒序存储
- 减法错位
if(a[i]<b[i]){
a[i]+=10;
a[i++]--;
}
c[i]=a[i]-b[i];
或者
c[i]=a[i]-b[i];
if(c[i]<0)
{
c[i]+=10;
c[i++]--;
}
【源程序】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
char al[2000],bl[2000],n[2000];
int a[2000],b[2000],c[2000];
int main()
{
int lena,lenb,lenc,i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>al,cin>>bl;
lena=strlen(al);
lenb=strlen(bl);
for(i=0;i<lena;i++)
a[lena-i]=al[i]-48;
for(i=0;i<lenb;i++)
b[lenb-i]=int(bl[i]-'0');
for(i=1;i<=lena;i++) {
c[i]=a[i]-b[i];
if(c[i]<0)
{
c[i]+=10;
c[i++]-=1;
}
}
lenc=i;
if(c[lenc]==0&&lenc>1)
lenc--;
for(i=lenc;i>=1;i--)
cout<<c[i];
cout<<endl;
return 0;
}