• 高精度模板(重载运算符)


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

    代码:

    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;
    }
    
  • 相关阅读:
    复利完结观看评价
    汉堡计划
    0406 复利计算完结篇
    构建之法 第四章 读后感
    复利计算单元测试
    实验一 cmd命令的编写
    构建之法 前三章读后感
    复利计算完成总结
    复利计算软件v3
    实验 0 了解和熟悉操作系统
  • 原文地址:https://www.cnblogs.com/conprour/p/15434215.html
Copyright © 2020-2023  润新知