高精度加法、减法、乘法

#include
using namespace std;
const int maxn=100005;
struct asd{
    int ans[maxn],len;
    bool jud;
    asd(){
        memset(ans,0,sizeof(ans));
        len=1;
        jud=0;
    }
    asd operator +(asd &A){
        asd B;
        B.len=max(len,A.len);
        for(int i=0;i=10){
                B.ans[i]-=10;
                B.ans[i+1]+=1;
            }
        }
        if(B.ans[B.len]) B.len++;
        return B;
    }
    asd operator -(asd &A) {
        asd B;
        bool jud=0;
        if(A.len>len) jud=1;
        else if(A.len==len){
            for(int i=len-1;i>=0;i--){
                if(A.ans[i]>ans[i]){
                    jud=1;
                    break;
                }
                if(A.ans[i]=ans[i]){
                    B.ans[i]=A.ans[i]-ans[i];
                } else {
                    B.ans[i]=A.ans[i]-ans[i]+10;
                    A.ans[i+1]--;
                }
            }
        } else {
            B.len=len;
            for(int i=0;i=A.ans[i]){
                    B.ans[i]=ans[i]-A.ans[i];
                } else {
                    B.ans[i]=ans[i]-A.ans[i]+10;
                    ans[i+1]--;
                }
            }
        }
        B.jud=jud;
        return B;
    }
    asd operator *(asd &A){
        asd B;
        for(int i=0;i=10){
                    B.ans[i+j+1]+=B.ans[i+j]/10;
                    B.ans[i+j]%=10;
                }
            }
        }
        B.len=A.len+len;
        return B;
    }
    void read(){
        char s[maxn];
        scanf("%s",s);
        int ll=strlen(s);
        for(int i=0;i=0;i--){
            printf("%d",ans[i]);
        }
        printf("\n");
    }
};
asd a,b,c;
int main(){
    a.read();
    b.read();
    c=a*b;//乘法
    c=a+b;//加法
    c=a-b;//减法
    c.write();
    return 0;
}

你可能感兴趣的:(高精度加法、减法、乘法)