先将字符数组内容复制到int型数组里,再一次考虑减法借位问题。
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,alen,blen,max;
char a[50],b[50];
int a1[50]={0},b1[50]={0};
int c[50]={0};
printf("请输入被减数:");
gets(a);
printf("请输入减数:");
gets(b);
alen=strlen(a);
blen=strlen(b);
max=(alen>blen)?alen:blen;
for(i=0;i<alen;i++)
a1[i]=a[i]-'0';
for(i=0;i<blen;i++)
b1[i]=b[i]-'0';
if((alen==blen)&&(strcmp(a,b)==0))
printf("0");
if(strcmp(a,b)>0||alen>=blen)
{
for(i=alen-1,j=blen-1;i>=0||j>=0;i--,j--)
{
if(a1[i]>=b1[j])
c[i]=a1[i]-b1[j];
else
{
a1[i-1]=a1[i-1]-1;
a1[i]=a1[i]+10;
c[i]=a1[i]-b1[j];
}
}
i=0;
while(c[i]==0)
i++;
for(i;i<max;i++)
printf("%d",c[i]);
}
else
{
printf("-");
for(i=alen-1,j=blen-1;i>=0||j>=0;i--,j--)
{
if(b1[j]>=a1[i])
c[j]=b1[j]-a1[i];
else
{
b1[j-1]=b1[j-1]-1;
b1[j]=b1[j]+10;
c[j]=b1[j]-a1[i];
}
}
j=0;
while(c[j]==0)
j++;
for(j;j<max;j++)
printf("%d",c[j]);
}
printf("\n");
return 0;
}