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

    高精度板子。

    我用的是重载运算符。

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<algorithm>
      4 
      5 struct mega
      6 {
      7     int num[200005];
      8     int len,val;
      9     bool anti;
     10     void reset()
     11     {
     12         len=val=0;
     13         anti=false;
     14         memset(num,0,sizeof(num));
     15     }
     16     friend bool operator < (mega &a,mega &b)
     17     {
     18         if(a.len!=b.len)return a.len<b.len;
     19         for(int i=a.len;i;i--)
     20             if(a.num[i]!=b.num[i])
     21                 return a.num[i]<b.num[i];
     22         return false;
     23     }
     24     friend mega operator + (mega &a,mega &b)
     25     {
     26         mega ans;
     27         ans.reset();
     28         ans.len=std::max(a.len,b.len);
     29         for(int i=1;i<=ans.len;i++)
     30         {
     31             ans.num[i]+=a.num[i]+b.num[i];
     32             ans.num[i+1]=ans.num[i]/10;
     33             ans.num[i]%=10;
     34         }
     35         if(ans.num[ans.len+1])ans.len++;
     36         return ans;
     37     }
     38     friend mega operator - (mega &a,mega &b)
     39     {
     40         mega ans;
     41         ans.reset();
     42         ans.len=std::max(a.len,b.len);
     43         if(a<b)
     44         {
     45             ans.anti=1;
     46             std::swap(a,b);
     47         }
     48         for(int i=1;i<=ans.len;i++)
     49         {
     50             ans.num[i]+=a.num[i]-b.num[i];
     51             if(ans.num[i]<0)ans.num[i]+=10,ans.num[i+1]--;
     52         }
     53         while((!ans.num[ans.len])&&ans.len)ans.len--;
     54         if(!ans.len)ans.len++;
     55         return ans;
     56     }
     57     friend mega operator * (mega &a,mega &b)
     58     {
     59         mega ans;
     60         ans.reset();
     61         ans.anti=a.anti^b.anti;
     62         ans.len=a.len+b.len;
     63         for(int i=1;i<=a.len;i++)
     64             for(int j=1;j<=b.len;j++)
     65                 ans.num[i+j-1]+=a.num[i]*b.num[j];
     66         for(int i=1;i<=ans.len;i++)
     67             ans.num[i+1]+=ans.num[i]/10,ans.num[i]%=10;
     68         while((!ans.num[ans.len])&&ans.len)ans.len--;
     69         if(!ans.len)ans.len++;
     70         return ans;
     71     }
     72     friend mega operator / (mega &a,mega &b)
     73     {
     74         mega ans;
     75         ans.reset();
     76         int div=b.val;
     77         ans.len=a.len;
     78         int tmp=0;
     79         for(int i=a.len;i;i--)
     80         {
     81             tmp=tmp*10+a.num[i];
     82             ans.num[i]=tmp/div;
     83             tmp%=div;
     84         }
     85         while((!ans.num[ans.len])&&ans.len)ans.len--;
     86         if(!ans.len)ans.len++;
     87         return ans;
     88     }
     89     friend int operator % (mega &a,mega &b)
     90     {
     91         int ans=0;
     92         int mod=b.val;
     93         for(int i=a.len;i;i--)ans=(ans*10+a.num[i])%mod;
     94         return ans;
     95     }
     96     void read()
     97     {
     98         char buf[100005];
     99         scanf("%s",buf+1);
    100         len=strlen(buf+1);
    101         for(int i=1;i<=len;i++)
    102             num[len-i+1]=buf[i]-'0',val=val*10+buf[i]-'0';
    103     }
    104     void print()
    105     {
    106         if(anti)putchar('-');
    107         for(int i=len;i;i--)printf("%d",num[i]);
    108         printf("
    ");
    109     }
    110 }a,b;
    111 
    112 int main()
    113 {
    114     int op;
    115     scanf("%d",&op);
    116     a.read();
    117     b.read();
    118     if(op==1)
    119     {
    120         mega ans=a+b;
    121         ans.print();
    122     }
    123     if(op==2)
    124     {
    125         mega ans=a-b;
    126         ans.print();
    127     }
    128     if(op==3)
    129     {
    130         mega ans=a*b;
    131         ans.print();
    132     }
    133     if(op==4)
    134     {
    135         mega ans=a/b;
    136         int res=a%b;
    137         ans.print();
    138         printf("%d
    ",res);
    139     }
    140     return 0;
    141 }
  • 相关阅读:
    StackExchange.Redis 文档翻译
    性能分析
    脚本
    KEYS,SCAN,FLUSHDB 等等,这些命令在哪里?
    事件
    发布/订阅 消息顺序
    Redis中的事务
    键、值以及通道
    管道和多路复用器
    配置
  • 原文地址:https://www.cnblogs.com/cervusy/p/9928623.html
Copyright © 2011-2022 走看看