【其他】大整数类Bignum

今天为大家带来一篇关于大整数类的文章,简单的写了一下关于大整数类的代码,类说白了就是在struct结构体里面写下只有它自己能调用的函数。不多说了 ,写了一个小时。这里没有写关于取余,除法,乘方的,还有正负没有打标记,有兴趣的读者可以自己去改。

#include 
#include 
#include 
using namespace std;
struct bignum
{
    vector<int> v;
    bignum operator = (long long l)
    {
        while(l)
        {
            v.push_back(l%10);
            l/=10;
        }
        return *this;
    }
    bool operator < (bignum b) const
    {
        if (v.size()>b.v.size())
            return 0;
        else if (v.size()return 1;
        else
        {
            for (int i=v.size()-1;i>=0;i--)
            {
                if (v[i]==b.v[i])
                    continue;
                else if (v[i]>b.v[i])
                    return 0;
                else
                    return 1;
            }
            return 0;
        }
    }
    bool operator > (bignum b) const
    {
        if (v.size()>b.v.size())
            return 1;
        else if (v.size()return 0;
        else
        {
            for (int i=v.size()-1;i>=0;i--)
            {
                if (v[i]==b.v[i])
                    continue;
                else if (v[i]>b.v[i])
                    return 1;
                else
                    return 0;
            }
            return 1;
        }
    }
    bool operator == (bignum b) const
    {
        if (v.size()!=b.v.size())
            return 0;
        for (int i=0;iif (v[i]!=b.v[i])
                return 0;
        return 1;
    }
    bignum operator + (bignum b) 
    {
        vector<int> t;
        int temp=0;
        int maxx=max(v.size(),b.v.size());
        int minn=min(v.size(),b.v.size());
        for(int i=0;i10);
            if((b.v[i]+v[i]+temp)/10==1)
                temp=1;
            else temp=0;
        }
        for(int i=minn;iif(maxx==b.v.size())
            t.push_back(b.v[i]);
            else
            t.push_back(v[i]);
        }
        for (int i=minn;i1;i++)
            if (t[i]>9)
            {
                t[i]-=10;
                t[i+1]++;
            }
        if (t[maxx-1]>9)
        {
            t[maxx-1]-=10;
            t.push_back(1);
        }
        bignum tep;
        tep.v=t;
        return tep;
    }
    //只允许用大的减去小的,可以先判断一下再加减
    //bool positive表示正负 这里没有 读者可依据实际情况自行修改
    bignum operator - (bignum b) const
    {
        vector<int> t;
        for (int i=0;ifor (int i=b.v.size();ifor (int i=0;iif (t[i]<0)
            {
                t[i+1]--;
                t[i]+=10;
            }
        int i=t.size()-1;
        while(t[i]==0)
        {
            t.pop_back();
            i--;
        }
        bignum tep;
        tep.v=t;
        return tep;
    }
    bignum operator * (bignum b)
    {
        bignum c;
        int alen,blen,maxx,temp,ttemp;
        alen=v.size();  blen=v.size();
        maxx=alen+blen; c.v.clear();
        for(int i=0;i0);
        for(int i=0;ifor(int j=0;j10;  temp%=10;
                c.v[i+j]+=temp;
                c.v[i+j+1]+=ttemp;
            }
        int i=c.v.size()-1;
        while(c.v[i]==0)
        {
            c.v.pop_back();
            i--;
        }
        return c; 
    }
    void print()
    {
        for (int i=v.size()-1;i>=0;i--)
            printf("%d",v[i]);
        printf("\n");
    }
};
int main()
{
    bignum a,b,c;
    long long  n,m;
    a=12; b=13;
    c=a+b;
    c.print();
    c=a*b;
    c.print();
    return 0;
}

你可能感兴趣的:(其他)