大数相减运算
当结果为负数时,结果显示不正常,如何修改?程序代码:
#include<stdio.h> #include<string.h> #include<math.h> #define M 10005 int main() { char a[M],b[M]; int a1[M],b1[M],i,j,m,n,k,max; scanf("%s%s",&a,&b); m=strlen(a); n=strlen(b); max=m; if(max<n) max=n; //选出最大位数是多少位 k=max; for(i=0;i<m;i++) //将字符串转换为数组 a1[i]=a[m-1-i]-'0'; for(j=0;j<n;j++) b1[j]=b[n-1-j]-'0'; i=0; if(k==m) { for(j=0;j<k;j++) { if(a1[i]<b1[j]) { a1[i]=a1[i]-b1[j]+10; a1[i+1]--; i++; } else { a1[i]=a1[i]-b1[j]; i++; } } i=k; while(a1[i]==0) i--; if(i<0) printf("0\n"); else { for(;i>=0;i--) printf("%d",a1[i]); } } else { for(j=0;j<k;j++) { if(b1[i]<a1[j]) { b1[i]=b1[i]-a1[j]+10; b1[i+1]--; i++; } else { b1[i]=b1[i]-a1[j]; i++; } } i=k; while(b1[i]==0) i--; if(i<0) printf("0\n"); else { for(;i>=0;i--) printf("-%d",b1[i]); } } return 0; }