高精度解題

其實,高精度解題就是一個思路,把他變爲數組,因爲數組可表示很大的一個數據。
但在高精度代碼的書寫過程之中,最主要的就是考慮到進位丟失的問題。這個問題就是說當兩個數相加的時候大於等於10的時候,按照我們常規算法是需要往前 進一。廢話不多說,代碼附上。代碼並不多,只是重複的代碼有一部分而已

#include<stdio.h>
#include<string.h>
char a[100000000];
char b[100000000];
int f[100000000];
int n,sum=0;
int main(){
    scanf("%s %s",a,b);
    int len1=strlen(a);
    int len2=strlen(b);
    memset(f,0,sizeof(f));
    if(len1>len2){
        n=len1-len2;
        for(int i=len2;i>=0;i--){
            b[i+n]=b[i];
            b[i]='0';
        }
        for(int i=0;i<len1;i++)
            printf("%c",b[i]);
        printf("\n");
        for(int i=len1-1;i>=0;i--){
            f[i]=f[i]+(a[i]-'0')+(b[i]-'0');
            if(f[i]/10!=0){
                f[i]%=10;
                if(i==0)
                    b[0]=1;
                else
                    f[i-1]=1;
            }
        }
        if(sum!=0){
            printf("%d",sum);
            for(int i=0;i<len1;i++){
                printf("%d",f[i]);
            }
        }
        else{
            for(int i=0;i<len1;i++){
                printf("%d",f[i]);
            }
        }
    }
    else if(len1<len2){
        n=len2-len1;
        for(int i=len1;i>=0;i--){
            a[i+n]=a[i];
            a[i]='0';
        }
        for(int i=0;i<len2;i++)
            printf("%c",a[i]);
        printf("\n");
        for(int i=len2-1;i>=0;i--){
            f[i]=f[i]+(a[i]-'0')+(b[i]-'0');
            if(f[i]/10!=0){
                f[i]%=10;
                if(i==0)
                    sum=1;
                else
                    f[i-1]=1;
            }
        }
        if(sum!=0){
            printf("%d",sum);
            for(int i=0;i<len1;i++){
                printf("%d",f[i]);
            }
        }
        else{
            for(int i=0;i<len2;i++){
                printf("%d",f[i]);
            }
        }
    }
    else{
        n=0;
        for(int i=len2-1;i>=0;i--){
            f[i]=f[i]+(a[i]-'0')+(b[i]-'0');
            if(f[i]/10!=0){
                f[i]%=10;
                if(i==0)
                    sum=1;
                else
                    f[i-1]=1;
            }
        }
        if(sum!=0){
            printf("%d",sum);
            for(int i=0;i<len1;i++){
                printf("%d",f[i]);
            }
    }
        else{
            for(int i=0;i<len2;i++){
                printf("%d",f[i]);
            }
        }
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章