zoukankan      html  css  js  c++  java
  • C++大数模板

    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    #include <string.h>
    using namespace std;
    const int MAXN=10005;
    const int BASE=100000;
    const int LEN=5;//防止int溢出,最多基数最多设为5位
    int max(int a,int b)
    {
        if(a>b)
            return a;
        return b;
    }
    struct BigInt{
    public:
        int e[MAXN];
        int len;
        BigInt()
        {
            memset(e,0,sizeof(e));
            len=0;
        }
        void set(int x)
        {
            while(x>0)
            {
                e[len++]=x%BASE;
                x/=BASE;
            }
        }
        bool operator>(const BigInt &b)
        {
            if(len>b.len)
            {
                return true;
            }
            else if(len==b.len)
            {
                int i;
                for(i=len-1;i>=0;i--)
                {
                    if(e[i]>b.e[i])    return true;
                    else if(e[i]<b.e[i])    return false;
                    else ;
                }
                return false;
            }
            else    
            {
                return false;
            }
        }
        BigInt operator+(const BigInt &b)
        {
            BigInt res;
            res.len=max(len,b.len);
            int up=0;
            for(int i=0;i<res.len;i++)
            {
                int z=e[i]+b.e[i];
                res.e[i]=z%BASE;
                up=z/BASE;
            }
            if(up!=0)    res.e[res.len++]=up;
            return res;
        }
        BigInt operator-(const BigInt &b)
        {
            BigInt res;
            res.len=max(len,b.len);
            int down=0;
            for(int i=0;i<res.len;i++)
            {
                int z=e[i]-b.e[i]-down;
                if(z<0)
                {
                    z+=BASE;
                    down=1;
                }
                else
                {
                    down=0;
                }
                res.e[i]=z;
            }
            while(res.len>1&&res.e[res.len-1]==0)    res.len--;
            return res;
        }
        BigInt operator*(const BigInt &b)
        {
            BigInt res;
            for(int i=0;i<len;i++)
            {
                int up=0;
                for(int j=0;j<b.len;j++)
                {
                    int z=(e[i]*b.e[j]+res.e[i+j]+up);
                    res.e[i+j]=z%BASE;
                    up=z/BASE;
                }
                if(up!=0)    res.e[i+b.len]=up;
            }
            res.len=len+b.len;
            while(res.len>1&&res.e[res.len-1]==0)    res.len--;
            return res;
        }
        BigInt operator/(const int &b)
        {
            BigInt res=*this;
            int carry=0;
            for(int i=len-1;i>=0;i--)
            {
                res.e[i]+=carry*BASE;
                carry=res.e[i]%b;
                res.e[i]/=b;
            }
            while(res.len>1&&res.e[res.len-1]==0)    res.len--;
            return res;
        }
        BigInt operator%(const int &b)
        {
            BigInt tmp=*this;
            BigInt B;
            B.set(b);
            BigInt res=tmp-(tmp/b)*B;
            return res;
        }
        friend ostream &operator<<(ostream &out,const BigInt &res)
        {
            out<<res.e[res.len-1];
            for(int i=res.len-2;i>=0;i--)
            {
                out<<setw(LEN)<<setfill('0')<<res.e[i];
            }
            out<<endl;
            return out;
        }
    };
    int main()
    {
        BigInt res;
        res.set(1092);
        res=res%1091;
        cout<<res;
        return 0;
    }
  • 相关阅读:
    浅谈js 构造函数 以及 new 运算符
    zabbix学习(一)——LNMP环境搭建及zabbix安装
    K8s部署使用CFSSL创建证书
    kubernetes环境搭建 -k8s笔记(一)
    windows下python3和python2虚拟环境配置
    QEMU/KVM网络模式(二)——NAT
    KVM安装
    QEMU网络模式(一)——bridge
    百度地图、腾讯地图、高德地图经纬度转换
    DOS入门(2)
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5674709.html
Copyright © 2011-2022 走看看