高精度減算入門の詳細


高精度減算
2つの正の整数を入力し、それらの差を求めます.【アルゴリズム解析】足し算のようなもの(足し算を習ったことがない方はブログの高精度足し算入門の詳細を参照)も同様に縦式で減算できます.減算を行う場合は、減数よりも被減数が大きく、借方を扱う必要があることに注意してください.高精度減算の参考手順:
#include
#include
#include
using namespace std;
int main()
{
    int a[256],b[256],c[256],lena,lenb,lenc,i;
    char n[256],n1[256],n2[256];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    printf("Input minuend:");    gets(n1);   //     
    printf("Input subtrahend:"); gets(n2);   //    
    if (strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
                                         //strcmp()        , n1==n2,   0;
           //n1>n2 ,     ;n1
    {                                        //        ,        
            strcpy(n,n1);                // n1         n  
            strcpy(n1,n2);
            strcpy(n2,n);
            cout<<"-";                    //         ,     
    }   
  
        lena=strlen(n1); lenb=strlen(n2);
        for (i=0;i<=lena-1;i++) a[lena-i]=int(n1[i]-'0');  //     a  
        for (i=0;i<=lenb-1;i++) b[lenb-i]=int(n2[i]-'0');  //    b  
    i=1;
    while (i<=lena||i<=lenb)
    {
        if (a[i]10;               //   ,      1 10
            a[i+1]--;
        }
        c[i]=a[i]-b[i];                        //     
        i++;
    }
    lenc=i;
    while ((c[lenc]==0)&&(lenc>1)) lenc--;   //    0       
    for (i=lenc;i>=1;i--) cout<//    
    cout<return 0;
}