zoukankan      html  css  js  c++  java
  • 高精度大数运算模板

    #define MAX 100000  
    #define base 10000  
    #define digit 4  
      
    struct bigint  
    {  
        int c[MAX];  
        int len;  
        void init()  
        {  
            len = 0;  
            memset(c,0,sizeof(c));  
        }  
      
        bigint()  
        {  
            init();  
            len = 1;  
        }  
      
        bigint(int n)  
        {  
            init();  
            do {  
                c[len++] = n%base;  
                n /= base;  
            } while(n);  
        }  
      
        bigint(char* s)  
        {  
            init();  
            for(int i=strlen(s);i>=0;i--)  
                c[i/4] = c[i/4]*10 + c[i] - '0';  
        }  
      
        bigint(const bigint & n)  
        {  
            *this = n;  
        }  
      
        bigint & operator = (const bigint & a)  
        {  
            len = a.len;  
            for(int i=0;i<len;i++) c[i] = a.c[i];  
            return *this;  
        }  
      
        bigint operator + (const bigint & a) const  
        {  
            bigint t;  
            t.len = max(a.len,len);  
            for(int i=0;i<t.len;i++)  
                t.c[i] = c[i]+a.c[i];  
            for(int i=0;i<t.len;i++)  
                t.c[i+1] += t.c[i]/base, t.c[i] %= base;  
            if(t.c[t.len]) t.len++;  
            return t;  
        }  
      
        bigint operator * (const bigint & a) const  
        {  
            bigint t;  
            t.len = a.len+len+2;  
            for(int i=0;i<len;i++) for(int j=0;j<a.len;j++)  
            {  
                t.c[i+j] += c[i]*a.c[j];  
                t.c[i+j+1] += t.c[i]/base;  
                t.c[i+j] %= base;  
            }  
            for(int i=0;i<t.len;i++)  
            {  
                t.c[i+1] += t.c[i]/base;  
                t.c[i] %= base;  
            }  
            while(!t.c[t.len-1]) t.len--;  
            return t;  
        }  
      
        void out()  
        {  
            printf("%d",c[len-1]);  
            for(int i=len-2;i>=0;i--)  
            {  
                printf("%04d",c[i]);  
            }  
        }  
      
        friend ostream & operator << (ostream & os,const bigint & a)  
        {  
            os << a.c[a.len - 1];  
            for(int i = a.len - 2;i>=0;i--)  
            {  
                os.width(digit);  
                os.fill('0');  
                os << a.c[i];  
            }  
            return os;  
        }  
      
        friend istream & operator >> (istream & is,bigint & a)  
        {  
            char s[MAX*4+1];  
            is>>s;  
            bigint t(s);  
            a = t;  
            return is;  
        }  
    };  



  • 相关阅读:
    移动端前端开发调试
    webkit图片滤镜
    ruby安装sass报错解决办法
    mongodb的查询语句学习摘要
    signedCookies
    [cookie篇]从cookie-parser中间件说起
    node.js下mongoose简单操作实例
    在ExpressJS中设置二级域名跨域共享Cookie
    Node.js开发工具、开发包、框架等总结
    hibernate框架学习笔记4:主键生成策略、对象状态
  • 原文地址:https://www.cnblogs.com/tham/p/6827174.html
Copyright © 2011-2022 走看看