大数模板

来源:互联网 发布:青海网络广播电视台 编辑:程序博客网 时间:2024/06/05 21:52

class bigInt{public:    int num[302],len;    bigInt() {num[0]=0,len=0;}    bigInt operator=(const int &a)    {        int tmp=a;        len=0;        while(tmp)            num[len++]=tmp%10,tmp/=10;        if (!len)num[0]=0,len=1;    }    bigInt(const int &a)    {        int tmp=a;        len=0;        while(tmp)            num[len++]=tmp%10,tmp/=10;        if (!len)num[0]=0,len= 1;    }    friend bool operator<(const bigInt &b,const bigInt &a)    {        if (a.len!=b.len)            return b.len<a.len;        for (int i=b.len-1;i>=0;i--)            if (b.num[i]!=a.num[i])                return b.num[i]<a.num[i];        return false;    }    friend bool operator>(const bigInt & b,const bigInt &a)    {        if (a.len!=b.len)            return b.len>a.len;        for (int i=b.len-1;i>=0;i--)            if (b.num[i]!=a.num[i])                return b.num[i]>a.num[i];        return false;    }    bigInt operator+(const bigInt &a)    {        bigInt res;        int i,j,c =0,adda,addb;        for (i=0,j=0;i<len||j<a.len||c;)        {            adda=0,addb=0;            if(i <len)                adda= num[i++];            if(j< a.len)                addb=a.num[j++];            res.num[res.len++]=(adda+addb+c)%10;            c=(adda+addb+c)/10;        }        return res;    }    bigInt operator-(const bigInt &b)    {        bigInt res;        int i,j,c=0,suba,subb;        for(i=0,j=0;i<len||j<b.len||c;)        {            suba=0,subb=0;            if(i<len)                suba=num[i++];            if(j<b.len)                subb=b.num[j++];            res.num[res.len++] =(suba-subb+c+10)%10;            c=(suba-subb+c+10)/10-1;        }        for(i=res.len-1;i>0;i--)            if (res.num[i])break;        res.len=i+1;        return res;    }    bigInt operator*(const bigInt &b)    {        bigInt res;        int i,j,c,now,mulb,tmp;        memset(res.num,0,sizeof(int)*(len+b.len));        for(i=0;i<len;i++)        {            now=i,c=0;            for(j=0;j<b.len||c;)            {                mulb=0;                if (j<b.len)                    mulb=b.num[j++];                tmp=res.num[now]+num[i]*mulb+c;                res.num[now++]=tmp % 10;                c=tmp/10;            }        }        for(i=len+b.len-1;i>0;i--)            if (res.num[i]) break;        res.len = i + 1;        return res;    }    void display()    {        int i;        for (i=len-1;i>1;i--)            if (num[i])break;        for (;i>=0;i--)            printf("%d",num[i]);        printf("\n");    }};




原创粉丝点击