zoukankan      html  css  js  c++  java
  • 大数加减法模板

      1 #include <iostream>
      2 #include <string.h>
      3 #include <string>
      4 using namespace std;
      5 char s1[10005],s2[10005];
      6 int a[10005],b[10005],c[10005];
      7 int flag;
      8 int main()
      9 {
     10     cin>>s1;
     11     cin>>s2;
     12     int len1=strlen(s1),len2=strlen(s2);
     13     int p1=0,p2=0;
     14 
     15     if(s1[0]!='-' && s2[0]!='-')
     16     {
     17         for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
     18         for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
     19         int len=len1>len2?len1:len2;
     20         for(int i=0;i<=len-1;i++)
     21         {
     22             c[i]+=a[i]+b[i];
     23             while(c[i]>=10)
     24             {
     25                 c[i]-=10;
     26                 c[i+1]+=1;
     27             }
     28         }
     29         if(c[len]!=0) cout<<c[len];
     30         for(int i=len-1;i>=0;i--) cout<<c[i];
     31         cout<<endl;
     32     }
     33 
     34     else if(s1[0]=='-' && s2[0]=='-')
     35     {
     36         for(int i=len1-1;i>=1;i--) a[p1++]=s1[i]-'0';
     37         for(int j=len2-1;j>=1;j--) b[p2++]=s2[j]-'0';
     38         int len=len1>len2?len1:len2;
     39         for(int i=0;i<=len-1-1;i++)
     40         {
     41             c[i]+=a[i]+b[i];
     42             while(c[i]>=10)
     43             {
     44                 c[i]-=10;
     45                 c[i+1]+=1;
     46             }
     47         }
     48         //if(c[len]!=0) cout<<c[len];   因为负号原因,减1,可以省去,用下面一行
     49         cout<<'-';
     50         if(c[len-1]!=0) cout<<c[len-1];
     51         for(int i=len-1-1;i>=0;i--) cout<<c[i];
     52         cout<<endl;
     53     }
     54 
     55     else if(s1[0]=='-' && s2[0]!='-')
     56     {
     57         for(int i=0;i<=len1-1;i++) s1[i]=s1[i+1];
     58         len1=strlen(s1);
     59 
     60         if(len1==len2)
     61         {
     62             if(strcmp(s1,s2)>0) flag=-1;
     63             else if(strcmp(s1,s2)<0) flag=1;
     64 
     65             for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
     66             for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
     67             int len=len1>len2?len1:len2;
     68             if(flag==0) cout<<'0'<<endl;
     69             else if(flag==-1)
     70             {
     71                 for(int i=0;i<=len-1;i++)
     72                 {
     73                     c[i]+=a[i]-b[i];
     74                     while(c[i]<0)
     75                     {
     76                         c[i]+=10;
     77                         c[i+1]-=1;
     78                     }
     79                 }
     80                 cout<<'-';
     81             }
     82             else if(flag==1)
     83             {
     84                 for(int i=0;i<=len-1;i++)
     85                 {
     86                     c[i]+=b[i]-a[i];
     87                     while(c[i]<0)
     88                     {
     89                         c[i]+=10;
     90                         c[i+1]-=1;
     91                     }
     92                 }
     93             }
     94             /*if(c[len]!=0) cout<<c[len];
     95             for(int i=len-1;i>=0;i--) cout<<c[i];*/  //减法不能这么输出,如12,19,是07,可能会减出前导0
     96             int j;
     97             for(j=len;j>=0;j--) if(c[j]!=0) break;
     98             for(int i=j;i>=0;i--) cout<<c[i];
     99             cout<<endl;
    100         }
    101 
    102         else if(len1>len2)
    103         {
    104             for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
    105             for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
    106             int len=len1>len2?len1:len2;
    107             for(int i=0;i<=len-1;i++)
    108             {
    109                 c[i]+=a[i]-b[i];
    110                 while(c[i]<0)
    111                 {
    112                     c[i]+=10;
    113                     c[i+1]-=1;
    114                 }
    115             }
    116             cout<<'-';
    117             int j;
    118             for(j=len;j>=0;j--) if(c[j]!=0) break;
    119             for(int i=j;i>=0;i--) cout<<c[i];
    120             cout<<endl;
    121         }
    122 
    123         else if(len1<len2)
    124         {
    125             for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
    126             for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
    127             int len=len1>len2?len1:len2;
    128             for(int i=0;i<=len-1;i++)
    129             {
    130                 c[i]+=b[i]-a[i];
    131                 while(c[i]<0)
    132                 {
    133                     c[i]+=10;
    134                     c[i+1]-=1;
    135                 }
    136             }
    137             int j;
    138             for(j=len;j>=0;j--) if(c[j]!=0) break;
    139             for(int i=j;i>=0;i--) cout<<c[i];
    140             cout<<endl;
    141         }
    142     }
    143 
    144     else if(s1[0]!='-' && s2[0]=='-')
    145     {
    146         for(int i=0;i<=len2-1;i++) s2[i]=s2[i+1];
    147         len2=strlen(s2);
    148 
    149         if(len1==len2)
    150         {
    151             if(strcmp(s1,s2)>0) flag=1;
    152             else if(strcmp(s1,s2)<0) flag=-1;
    153 
    154             for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
    155             for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
    156             int len=len1>len2?len1:len2;
    157             if(flag==0) cout<<'0'<<endl;
    158             else if(flag==1)
    159             {
    160                 for(int i=0;i<=len-1;i++)
    161                 {
    162                     c[i]+=a[i]-b[i];
    163                     while(c[i]<0)
    164                     {
    165                         c[i]+=10;
    166                         c[i+1]-=1;
    167                     }
    168                 }
    169             }
    170             else if(flag==-1)
    171             {
    172                 for(int i=0;i<=len-1;i++)
    173                 {
    174                     c[i]+=b[i]-a[i];
    175                     while(c[i]<0)
    176                     {
    177                         c[i]+=10;
    178                         c[i+1]-=1;
    179                     }
    180                 }
    181                 cout<<'-';
    182             }
    183             /*if(c[len]!=0) cout<<c[len];
    184             for(int i=len-1;i>=0;i--) cout<<c[i];*/  //减法不能这么输出,如12,19,是07,可能会减出前导0
    185             int j;
    186             for(j=len;j>=0;j--) if(c[j]!=0) break;
    187             for(int i=j;i>=0;i--) cout<<c[i];
    188             cout<<endl;
    189         }
    190 
    191         else if(len1>len2)
    192         {
    193             for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
    194             for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
    195             int len=len1>len2?len1:len2;
    196             for(int i=0;i<=len-1;i++)
    197             {
    198                 c[i]+=a[i]-b[i];
    199                 while(c[i]<0)
    200                 {
    201                     c[i]+=10;
    202                     c[i+1]-=1;
    203                 }
    204             }
    205             int j;
    206             for(j=len;j>=0;j--) if(c[j]!=0) break;
    207             for(int i=j;i>=0;i--) cout<<c[i];
    208             cout<<endl;
    209         }
    210 
    211         else if(len1<len2)
    212         {
    213             for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-'0';
    214             for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-'0';
    215             int len=len1>len2?len1:len2;
    216             for(int i=0;i<=len-1;i++)
    217             {
    218                 c[i]+=b[i]-a[i];
    219                 while(c[i]<0)
    220                 {
    221                     c[i]+=10;
    222                     c[i+1]-=1;
    223                 }
    224             }
    225             cout<<'-';
    226             int j;
    227             for(j=len;j>=0;j--) if(c[j]!=0) break;
    228             for(int i=j;i>=0;i--) cout<<c[i];
    229             cout<<endl;
    230         }
    231     }
    232 
    233     return 0;
    234 }
  • 相关阅读:
    Python len() 方法
    Python join() 方法
    Python isupper() 方法
    使用quartz进行容器启动时登陆接口服务器和接口服务器进行心跳连接
    实现锁死的有滚动条的div的表格(datagird)
    使用spring的事务的三种方法
    webservice系统学习笔记7-使用handler实现过滤器/拦截器效果
    webservice系统学习笔记7-异常处理
    webservice系统学习笔记6-使用soap的header传递消息
    JSTL fmt:formatNumber 数字、货币格式化
  • 原文地址:https://www.cnblogs.com/redblackk/p/9898721.html
Copyright © 2011-2022 走看看