c++实现大数的加减乘运算(数组存放)

应用中需要解决大数运算问题,请设计无符号大数类,能支持+,-,*,比较运算和输出,假定本题大数在200位以内,输入数据均合法。

代码:


#include

#include
#include
#include


using namespace std;


class daShu{
private:
    int shu[200];
    int lens;
public:
    daShu(){
        lens=0;
        for(int i=0;i<200;i++)shu[i]=0;
    }
    void show()const{/*展示大数*/
        for(int i=0;i             cout<         }
        cout<     }
    int getsize(){return lens;}
    void intsert(int i,int e);
    daShu& operator=(const daShu &a);
    friend daShu operator+(const daShu &a,const daShu &b);/*重载运算符*/
    friend daShu operator-(const daShu &a,const daShu &b);
    friend daShu operator*(const daShu &a,const daShu &b);


};




void daShu::intsert(int i,int e){
    shu[i] = e;
    lens++;
}


daShu& daShu::operator=(const daShu &a){
    if(this!=&a){
        for(int i=0;i         for(int i=0;i         lens=a.lens;
    }
    return *this;


}


daShu operator+(const daShu &a,const daShu &b){
    daShu temp;
    int x=0,y=0;/*记录十位,个位*/
    int add=0;/*记录临时和*/
    if(&b!=&a){
        int i=0,j=0;
        for(i=a.lens-1,j=b.lens-1;j>=0;i--,j--){
            add = a.shu[i]+b.shu[j]+y;
            x=add%10;//个位
            temp.shu[i]=x;
            add=add/10;
            y=add%10;//十位
        }
        while(i>=0){
            add = a.shu[i]+y;
            x=add%10;
            temp.shu[i]=x;
            //cout<             add=add/10;
            y=add%10;
            i--;
        }
        temp.lens=a.lens;
        if(y!=0){
            for(int i=temp.lens;i>0;i--)temp.shu[i]=temp.shu[i-1];
            temp.shu[0]=y;
            temp.lens+=1;
        }
    }
    return temp;
}


daShu operator-(const daShu &a,const daShu &b){
    daShu temp;
    if(&a!=&b){
        int i=0,j=0,k=0;
        for(i=0;i         for(i=a.lens-1,j=b.lens-1;j>=0;j--,i--){
            if(temp.shu[i]                 temp.shu[i] = temp.shu[i]+10-b.shu[j];
                for(k=1;temp.shu[i-k]==0;k++){
                    temp.shu[i-k]=9;
                }
                temp.shu[i-k]--;
            }else{
                temp.shu[i] = temp.shu[i]-b.shu[j];
            }
        }
        temp.lens = a.lens;
        if(temp.shu[0]==0){
            for(int m=0;m             temp.lens--;
        }
    }
    return temp;
}


daShu operator*(const daShu &a,const daShu &b){
    daShu temp;
    temp.lens=a.lens+b.lens;
    if(&a!=&b){
        int i=0,j=0,k=temp.lens-1;//k控制累加移动
        for(j=b.lens-1;j>=0;j--,k--){
            int m=k;
            int x=0,y=0;/*记录十位,个位*/
            int add=0;/*记录临时积*/
            for(i=a.lens-1;i>=0;i--,m--){//m控制移动
                add = b.shu[j]*a.shu[i]+temp.shu[m]+y;
                x=add%10;//个位
                temp.shu[m]=x;
                add=add/10;
                y=add%10;//十位
            }
            if(y!=0)temp.shu[m]=y;
        }
        while(temp.shu[0]==0){
            for(i=0;i             temp.lens--;
        }
    }
    return temp;
}


int main()
{
    daShu a,b,c,d,e;
    char x[200],y[200];
    cin.getline(x,200);
    cin.getline(y,200);
    for(size_t i=0;i         char temp[2];
        temp[0] = x[i];
        temp[1] = '\0';
        a.intsert(i,atoi(temp));
    }
    for(size_t i=0;i         char temp[2];
        temp[0] = y[i];
        temp[1] = '\0';
        b.intsert(i,atoi(temp));
    }
    c=a+b;
    d=a-b;
    e=a*b;
    c.show();
    d.show();
    e.show();
    return 0;
}

你可能感兴趣的:(c++大数的加减乘(数组),c++,大数加减乘)