实现输入两个超过整型范围的数之差
思路:
输入的两个数要先比较大小,小数减大数当然要添负号。
比如100 - 9 ,第一步0 - 9, 不够减,向高位借,十位上还是0,则10位变成9,
再向高位借,百位上的1变0.
代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[231],b[231],c[231];
int lena,lenb,i,j,flag=0,k=0,x;
scanf("%s%s",a,b);
lena=strlen(a);
lenb=strlen(b);
for (i=0;i<lena;i++)
a[i]=a[i]-48;
for (i=0;i<lenb;i++)
b[i]=b[i]-48;//全部转换为数字
if (lena>lenb)
flag=1;
else if (lena == lenb)
{
if (strcmp(a,b)>0)
flag=1;
}//flag为1,代表a大于b
if (flag)//当a>b时
{
for (i=lena-1,j=lenb-1;i>=0;i--,j--)
{
if (a[i]-b[j]<0&&j>=0)
{
x=i;
a[x]=a[x]+10;
while (a[--x]==0)//高位是0的情况
{
a[x]=9;
}
a[x]=a[x]-1; //不是0的-1
}
if (j<0) //当j<0是,则把a[i]的赋值到c数字中
c[k++]=a[i];
else
c[k++]=a[i]-b[j];
}
for (i=k-1;i>=0;i--)//去除前面多余的0
{
if (c[i]!=0)
break;
}
for (j=i;j>=0;j--)
printf("%c",c[j]+'0');
}
else//当a<b时
{
for (i=lenb-1,j=lena-1;i>=0;i--,j--)
{
if (b[i]-a[j]<0&&j>=0)
{
x=i;
b[x]=b[x]+10;
while (b[--x]==0)
{
b[x]=9;
}
b[x]=b[x]-1;
}
if (j<0)
c[k++]=b[i];
else
c[k++]=b[i]-a[j];
}
for (i=k-1;i>=0;i--)
if (c[i]!=0)
break;
putchar('-');
for (j=i;j>=0;j--)
printf("%c",c[j]+'0');
}
return 0;
}