zoukankan      html  css  js  c++  java
  • 高精度模板(重载运算符)

    重载运算符,应该是最方便写和调用的高精度写法了。

    代码:

    struct haa
    {
        int len,a[N];
        haa(){len=1;memset(a,0,sizeof(a));}
        haa(ll x){while(x) a[++len]=x%10,x/=10;}
    };
    char s[N];
    inline haa read_haa()
    {
        haa ret;
        scanf("%s",s+1);
        ret.len=strlen(s+1);
        for(int i=ret.len;i>=1;i--) ret.a[i]=s[ret.len-i+1]-(int)'0';
        return ret;
    }
    inline void print_haa(const haa ret)
    {
        for(int i=ret.len;i>=1;i--)
            printf("%d",ret.a[i]);
        putchar('
    ');
    }
    inline haa operator + (const haa &x,const haa &y)//高精+高精
    {
        haa ret; ret.len=max(x.len,y.len)+1;
        int up=0;
        for(int i=1;i<=ret.len;i++)   
        {
            ret.a[i]=(up+x.a[i]+y.a[i]);
            up=ret.a[i]/10;
            ret.a[i]%=10;
        }
        while(ret.len>1&&!ret.a[ret.len]) ret.len--;
        return ret;
    }
    inline haa operator / (const haa &x,const ll &y)//高精/低精
    {
        haa ret; ret.len=x.len;
        ll down=0ll;//这里别忘了开 long long
        for(int i=ret.len;i>=1;i--)
        {
            ret.a[i]=(down*10+x.a[i])/y;
            down=(down*10+x.a[i])%y;
        }
        while(ret.len>1&&!ret.a[ret.len]) ret.len--;
        return ret;
    }
    inline haa operator * (const haa &x,const haa &y)//高精*高精
    {
        haa ret; ret.len=x.len+y.len;
        for(int i=1;i<=x.len;i++)   
            for(int j=1;j<=y.len;j++)   
                ret.a[i+j-1]+=x.a[i]*y.a[j];
        int up=0;
        for(int i=1;i<=ret.len;i++)
        {
            ret.a[i]+=up;
            up=ret.a[i]/10;
            ret.a[i]%=10;
        }
        while(ret.len>1&&!ret.a[ret.len]) ret.len--;
        return ret;
    }
    
  • 相关阅读:
    linux-cp
    linux-rmdir
    linux-tail
    linux-head
    linux 重定向
    hadoop环境安装及错误总结
    vim 图册
    为什么可以这么快! awk 与python的应用
    八大排序算法的 Python 实现
    linux的文件隐藏属性 chattr lsattr
  • 原文地址:https://www.cnblogs.com/conprour/p/15434215.html
Copyright © 2011-2022 走看看