A+B长整数的加法(算法实现)

来源:互联网 发布:美国10月非农数据统计 编辑:程序博客网 时间:2024/04/29 18:38

问题:计算长度100位以内的 20进制的加法

分析:用字符串存储 A,B 再两位两位的做加法运算,注意进位怎么处理。

源码:

Code:
  1. #include <iostream>  
  2. #include <fstream>  
  3. #include <vector>  
  4. #include <string>  
  5. #include <algorithm>   
  6.   
  7.   
  8. /*  
  9.   *author : husiwen  
  10.   *function : 计算长度100位以内的 20进制的加法  
  11.   *Program idea:  
  12.   *(1)先把加数和被加数反转,再从第0位开始  
  13.   *(2)到末尾两位依次相加;  
  14.   *(3)每两位的结果放置于一向量表中,  
  15.   *(4)待全部完成后,逆序输出;  
  16.   */  
  17.   
  18. using namespace std;   
  19.   
  20. int main(int argc,char * argv[])   
  21. {   
  22.     //ifstream cin("aaa.txt");   
  23.     string sa,sb,t;   
  24.     vector<int> v;   
  25.     int i;   
  26.     int a,b,sum;   
  27.     int flag;   
  28.     while (cin>>sa>>sb)   
  29.     {   
  30.         flag = 0;   //没有进位   
  31.         v.clear();  // 清空结果向量   
  32.         sum = 0;    //置结果为0   
  33.         //反转两个字符串   
  34.         reverse(sa.begin(),sa.end());   
  35.         reverse(sb.begin(),sb.end());   
  36.   
  37.         if(sa.size()<sb.size())//sa中放长字符,sb中放短字符;   
  38.         {   
  39.             t=sa;   
  40.             sa=sb;//交换算法:再常用不过了。   
  41.             sb=t;   
  42.         }   
  43.   
  44.         for(i=0;i<sa.size();i++)   
  45.         {   
  46.             //20进制的表示 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19;   
  47.             //             0 1 2 3 4 5 6 7 8 9  a  b  c  d  e  f  g  h  i  j   
  48.             if (sa[i]=='0') a=0;   
  49.             else if(sa[i]=='1') a=1;   
  50.             else if(sa[i]=='2') a=2;   
  51.             else if(sa[i]=='3') a=3;   
  52.             else if(sa[i]=='4') a=4;   
  53.             else if(sa[i]=='5') a=5;   
  54.             else if(sa[i]=='6') a=6;   
  55.             else if(sa[i]=='7') a=7;   
  56.             else if(sa[i]=='8') a=8;   
  57.             else if(sa[i]=='9') a=9;   
  58.             else if(sa[i]=='a') a=10;   
  59.             else if(sa[i]=='b') a=11;   
  60.             else if(sa[i]=='c') a=12;   
  61.             else if(sa[i]=='d') a=13;   
  62.             else if(sa[i]=='e') a=14;   
  63.             else if(sa[i]=='f') a=15;   
  64.             else if(sa[i]=='g') a=16;   
  65.             else if(sa[i]=='h') a=17;   
  66.             else if(sa[i]=='i') a=18;   
  67.             else if(sa[i]=='j') a=19;   
  68.   
  69.             if(i>sb.size()) b=0;   
  70.             else  
  71.             {   
  72.                 if (sb[i]=='0') b=0;   
  73.                 else if(sb[i]=='1') b=1;   
  74.                 else if(sb[i]=='2') b=2;   
  75.                 else if(sb[i]=='3') b=3;   
  76.                 else if(sb[i]=='4') b=4;   
  77.                 else if(sb[i]=='5') b=5;   
  78.                 else if(sb[i]=='6') b=6;   
  79.                 else if(sb[i]=='7') b=7;   
  80.                 else if(sb[i]=='8') b=8;   
  81.                 else if(sb[i]=='9') b=9;   
  82.                 else if(sb[i]=='a') b=10;   
  83.                 else if(sb[i]=='b') b=11;   
  84.                 else if(sb[i]=='c') b=12;   
  85.                 else if(sb[i]=='d') b=13;   
  86.                 else if(sb[i]=='e') b=14;   
  87.                 else if(sb[i]=='f') b=15;   
  88.                 else if(sb[i]=='g') b=16;   
  89.                 else if(sb[i]=='h') b=17;   
  90.                 else if(sb[i]=='i') b=18;   
  91.                 else if(sb[i]=='j') b=19;   
  92.             }   
  93.             sum = a+b+flag ;   
  94.             if(sum>19)   
  95.             {   
  96.                 flag = 1;      //进位   
  97.                 sum =sum -20;  //保留位   
  98.             }   
  99.             else  
  100.             {   
  101.                 flag = 0;   
  102.             }   
  103.             v.push_back(sum);//保存保留位   
  104.             //每两位的数值相加后进入向量v中;   
  105.         }   
  106.   
  107.         if (flag == 1) v.push_back(1);   
  108.          //输出结果   
  109.         for(i =v.size()-1; i>=0 ; i--)   
  110.         {   
  111.             if(v[i]<10) cout<<v[i];   
  112.             //判断输出   
  113.             else if(v[i]==10) cout<<"a";   
  114.             else if(v[i]==11) cout<<"b";   
  115.             else if(v[i]==12) cout<<"c";   
  116.             else if(v[i]==13) cout<<"d";   
  117.             else if(v[i]==14) cout<<"e";   
  118.             else if(v[i]==15) cout<<"f";   
  119.             else if(v[i]==16) cout<<"g";   
  120.             else if(v[i]==17) cout<<"h";   
  121.             else if(v[i]==18) cout<<"i";   
  122.             else if(v[i]==19) cout<<"j";   
  123.         }   
  124.         cout<<endl;   
  125.   
  126.     }   
  127.     return 0;   
  128. }   

测试结果:

Code:
  1. 12355669998779   
  2. 12335340084958204   
  3. 124476956edieg97d   
  4.   
  5. 12354892134095873405acb   
  6. abc   
  7. 1235489213409587340g143  

 

 

原创粉丝点击