描述
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
样例输入
9999999999999999999999999999999999999 9999999999999
样例输出
9999999999999999999999990000000000000
算法
#include<stdio.h>
#include<string.h>
#define max 200
int main()
{
int a[max],b[max],c[max];
int len_a,len_b,len_c=1,x=0;
int i,j,k,m;
char a1[max],b1[max];
gets(a1);
gets(b1);
len_a=strlen(a1);
len_b=strlen(b1);
for(i=0;i<=len_a-1;i++) //将减数数组逆序存入a数组中
{
a[len_a-i]=a1[i]-'0';
}
for(j=0;j<=len_b-1;j++) //将被减数逆序存入数组b中
{
b[len_b-j]=b1[j]-'0';
}
for(m=len_b+1; m<=len_a; m++) //将减数数组b补0补足位
{
b[m]=0;
}
len_c=1;
while(len_c<=len_a) //进行借位减法运算
{
c[len_c]=a[len_c]-b[len_c]-x; //按位相减
if(c[len_c]<0) //判断c[Lc]小于0,则借位
{
x=1;
c[len_c]+=10;
}
else{
x=0;
}
len_c++;
}
while(c[len_c-1]==0) //删掉多余的前导0
{
len_c--;
}
for(k=len_c-1; k>=1; k--) //因为前面进行倒序相加,注意进行倒序输出
{
printf("%d",c[k]);
}
return 0;
}