1. 程式人生 > >12.2 大數減法

12.2 大數減法

計算超出long long範圍的數的減法
將數存入陣列,考慮向前借一還有高位是0的情況
程式碼:

#include <stdio.h>
#include <string.h>
int main()
{
    char a[1000],b[1000];
    while(scanf("%s %s",a,b)!=EOF){
        int l[1000];
        int l1[1000];
        int c,d,e,i,j,k,p,q;
        c=strlen(a);
        d=strlen(b);
        if(d>=c) e=d;
        if(c>d) e=c;
        for(i=0;i<c;i++){
            l[i]=a[c-1-i]-'0';
        }
        for(j=0;j<d;j++){
            l1[j]=b[d-1-j]-'0';
        }
        for(k=0;k<d;k++){
            l[k]=l[k]-l1[k];
            if(l[k]<0){     //  向前借1
                l[k]=l[k]+10;
                l[k+1]--;
            }
        }
        //  找到不為零的最高位
        for(q=e-1;q>=0;q--){
            if(l[q]!=0){
                e=q;
                break;
            }
        }
        for(p=e;p>=0;p--){
            printf("%d",l[p]);
        }
        printf("\n");
    }
    return 0;
}