• 加与减与乘与除


    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2000;
    struct bign
    {
        int d[maxn],len;
        void clean()
        {
            while(len>1&&!d[len-1])len--;
        }
        bign()
        {
            memset(d,0,sizeof(d));
            len=1;
        }
        bign(int num)
        {
            *this=num;
        }
        bign(char *num)
        {
            *this=num;
        }
        bign operator = (const int num)
        {
            char s[maxn];
            sprintf(s,"%d",num);
            *this=s;
            return *this;
        }
        bign operator = (const char *num)
        {
            len=strlen(num);
            for(int i=0; i<len; i++)d[i]=num[len-1-i]-48;
            clean();
            return *this;
        }
        string str()const
        {
            string res;
            for(int i=0; i<len; i++)res=char(d[i]+48)+res;
            return res;
        }

        bign operator + (const bign& b)
        {
            bign c;
            int i;
            c=*this;
            for(i=0; i<b.len; i++)
            {
                c.d[i]+=b.d[i];
                if(c.d[i]>9)
                {
                    c.d[i]-=10;
                    c.d[i+1]++;
                }
            }
            while(c.d[i]>9)
            {
                c.d[i++]-=10;
                c.d[i]++;
            }
            c.len=max(b.len,len);
            if(c.d[i]&&c.len<=i)c.len=i+1;
            return c;
        }
        bign operator - (const bign& b)
        {
            bign c;
            int i;
            c=*this;
            for(i=0; i<b.len; i++)
            {
                c.d[i]-=b.d[i];
                if(c.d[i]<0)
                {
                    c.d[i]+=10;
                    c.d[i+1]--;
                }
            }
            while(c.d[i]<0)
            {
                c.d[i++]+=10;
                c.d[i]--;
            }
            c.clean();
            return c;
        }
        bign operator * (const bign& b)const
        {
            int i,j;
            bign c;
            c.len=len+b.len;
            for(i=0;i<len;i++)
            {
                for(j=0;j<b.len;j++)c.d[i+j]+=d[i]*b.d[j];
            }
            for(i=0;i<c.len-1;i++)
            {
                c.d[i+1]+=c.d[i]/10;
                c.d[i]%=10;
            }
            c.clean();
            return c;
        }
        bign operator / (const bign& b)
        {
            int i,j;
            bign c=*this,a=0;
            for(i=len-1;i>=0;i--)
            {
                a=a*10+d[i];
                for(j=0;j<10;j++)
                {
                    if(a<b*(j+1))break;
                }
                c.d[i]=j;
                a=a-b*j;
            }
            c.clean();
            return c;
        }
            bign operator % (const bign& b)
        {
            int i,j;
            bign a=0;
            for(i=len-1;i>=0;i--)
            {
                a=a*10+d[i];
                for(j=0;j<10;j++)
                {
                    if(a<b*(j+1))break;
                }
                a=a-b*j;
            }
            return a;
        }
        bool operator < (const bign& b)const
        {
            if(len!=b.len)return len<b.len;
            for(int i=len-1;i>=0;i--)
            {
                if(d[i]!=b.d[i])return d[i]<b.d[i];
            }
            return false;
        }
        bool operator > (const bign& b)const{return b<*this;}
        bool operator <= (const bign& b)const{return !(b<*this);}
        bool operator >= (const bign& b)const{return !(*this<b);}
        bool operator != (const bign& b)const{return b<*this||*this<b;}
        bool operator == (const bign& b)const{return !(b<*this)&&!(*this<b);}
    };

    istream& operator >> (istream& in,bign& x)
    {
        string s;
        in>>s;
        x=s.c_str();
        return in;
    }
    ostream& operator << (ostream& out,const bign& x)
    {
        out<<x.str();
        return out;
    }
    int main()
    {
        bign a,b;
        cin>>a>>b;
        cout<<a<<"+"<<b<<"="<<a+b<<endl;
        cout<<a<<"-"<<b<<"="<<a-b<<endl;
        cout<<a<<"*"<<b<<"="<<a*b<<endl;
        cout<<a<<"/"<<b<<"="<<a/b<<endl;
        cout<<a<<"%"<<b<<"="<<a%b<<endl;
        return 0;
    }

  • 相关阅读:
    对List进行子查询及分组
    网格数据库架构设计构想
    推荐一款简单实用的漏洞测试工具:Paros
    用友U9产品SOA设计架构遭技术质疑
    超简单使用MemCached
    不按常规出招
    如何学好AJax、求高手指点
    Begin
    SpringBoot基础
    SpringBoot基础学习(番外9.1)Spring MVC或Spring Boot配置默认访问页面不生效?
  • 原文地址:https://www.cnblogs.com/sphreez/p/8594951.html
Copyright © 2020-2023  润新知