• a+b


    高精度加减乘除

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<algorithm>
      4 using namespace std;
      5 const int mod=10000;
      6 int t,A,B;
      7 char s[1000005];
      8 struct node{
      9     int num[1000005];
     10     int len,neg;
     11     friend node operator+(node &x,node &y);
     12     friend node operator-(node &x,node &y);
     13     friend bool operator!=(node &x,node &y){
     14         if(x.len!=y.len){
     15             return true;
     16         }
     17         for(int i=1;i<=x.len;i++){
     18             if(x.num[i]!=y.num[i]){
     19                 return true;
     20             }
     21         }
     22         return false;
     23     }
     24     friend bool operator<=(node &x,node &y){
     25         if(x.len!=y.len){
     26             return (x.len<y.len);
     27         }
     28         for(int i=x.len;i>=1;i--){
     29             if(x.num[i]!=y.num[i]){
     30                 return (x.num[i]<y.num[i]);
     31             }
     32         }
     33         return true;
     34     }
     35     friend node operator+(node &x,node &y){
     36         node ret;
     37         memset(&ret,0,sizeof(ret));
     38         if(x.neg&&y.neg){
     39             ret.neg^=1;
     40         }
     41         else if(x.neg){
     42             x.neg^=1;
     43             return y-x;
     44         }
     45         else if(y.neg){
     46             y.neg^=1;
     47             return x-y;
     48         }
     49         ret.len=max(x.len,y.len);
     50         for(int i=1;i<=ret.len;i++){
     51             ret.num[i+1]+=(ret.num[i]+x.num[i]+y.num[i])/mod;
     52             (ret.num[i]+=x.num[i]+y.num[i])%=mod;
     53         }
     54         if(ret.num[ret.len+1])ret.len++;
     55         return ret;
     56     }
     57     friend node operator-(node &x,node &y){
     58         node ret;
     59         memset(&ret,0,sizeof(ret));
     60         if(x.neg&&y.neg){
     61             x.neg^=1;
     62             y.neg^=1;
     63             return y-x;
     64         }
     65         else if(x.neg){
     66             y.neg^=1;
     67             return x+y;
     68         }
     69         else if(y.neg){
     70             y.neg^=1;
     71             return x+y;
     72         }
     73         if(x!=y&&x<=y){
     74             ret.neg^=1;
     75             swap(x,y);
     76         }
     77         ret.len=max(x.len,y.len);
     78         for(int i=1;i<=ret.len;i++){
     79             if(x.num[i]<y.num[i]){
     80                 x.num[i]+=mod;
     81                 x.num[i+1]--;
     82             }
     83             ret.num[i]=x.num[i]-y.num[i];
     84         }
     85         while((ret.len>1)&&(!ret.num[ret.len])){
     86             ret.len--;
     87         }
     88         return ret;
     89     }
     90     friend node operator*(node &x,int y){
     91         node ret=x;
     92         if(x.neg&&y>0)ret.neg^=1;
     93         else if((!x.neg)&&y<0)ret.neg^=1,y=-y;
     94         for(int i=1;i<=ret.len;i++){
     95             ret.num[i+1]+=(ret.num[i]*y)/mod;
     96             (ret.num[i]*=y)%=mod;
     97         }
     98         if(ret.num[ret.len+1])ret.len++;
     99         return ret;
    100     }
    101     friend node operator*(node &x,node &y){
    102         node ret;
    103         memset(&ret,0,sizeof(ret));
    104         ret.neg=x.neg^y.neg;
    105         ret.len=x.len+y.len;
    106         for(int i=1;i<=x.len;i++){
    107             for(int j=1;j<=y.len;j++){
    108                 ret.num[i+j]+=(ret.num[i+j-1]+x.num[i]*y.num[j])/mod;
    109                 (ret.num[i+j-1]+=x.num[i]*y.num[j])%=mod;
    110             }
    111         }
    112         while((ret.num[ret.len]==0)&&ret.len>1)ret.len--;
    113         return ret;
    114     }
    115     friend pair<node,int> operator/(node &x,int y){
    116         node ret=x;int rst=0;
    117         if(x.neg&&y>0)ret.neg^=1;
    118         else if((!x.neg)&&y<0)ret.neg^=1,y=-y;
    119         for(int i=ret.len;i>=1;i--){
    120             rst=ret.num[i]%y;
    121             ret.num[i]=ret.num[i]/y;
    122             ret.num[i-1]+=rst*mod;
    123         }
    124         while((ret.num[ret.len]==0)&&(ret.len>1))ret.len--;
    125         return make_pair(ret,rst);
    126     }
    127 }a,b;
    128 node read(){
    129     node ret;
    130     memset(&ret,0,sizeof(ret));
    131     scanf("%s",s+1);
    132     int len=strlen(s+1);
    133     if(s[1]=='-')ret.neg^=1;
    134     int cnt=0,mul=1;ret.len=1;
    135     for(int i=len;i>ret.neg;i--){
    136         ret.num[ret.len]+=mul*(s[i]-'0');
    137         cnt++;mul*=10;
    138         if(cnt==4){
    139             cnt=0;mul=1;
    140             ret.len++;
    141         }
    142     }
    143     if(!ret.num[ret.len])ret.len--;
    144     return ret;
    145 }
    146 void print(node x){
    147     if(x.len==1&&x.num[1]==0){
    148         printf("0
    ");
    149         return;
    150     }
    151     if(x.neg)printf("-");
    152     printf("%d",x.num[x.len]);
    153     for(int i=x.len-1;i>=1;i--){
    154         printf("%04d",x.num[i]);
    155     }
    156     printf("
    ");
    157 }
    158 int main(){
    159     scanf("%d",&t);
    160     if(t==1){
    161         a=read();
    162         b=read();
    163         print(a+b);
    164     }
    165     if(t==2){
    166         a=read();
    167         b=read();
    168         print(a-b);
    169     }
    170     if(t==3){
    171         a=read();
    172         b=read();
    173         print(a*b);
    174     }
    175     if(t==4){
    176         a=read();
    177         scanf("%d",&B);
    178         pair<node,int>ans=a/B;
    179         print(ans.first);
    180         printf("%d
    ",ans.second);
    181     }
    182     return 0;
    183 }
  • 相关阅读:
    HTML5 新标签
    lAMBDA表达式剖析
    whitespace 属性设置如何处理元素内的空白。
    "~/" asp.net 表示路径的方法
    ASP.NET Session详解
    关于CSS Selector的优先级
    关于汉字转拼音
    ChildActionOnly + ActionName的用法
    html中的caption是什么用
    window.location.href location.href parent.location.href
  • 原文地址:https://www.cnblogs.com/lnxcj/p/9927615.html
Copyright © 2020-2023  润新知