问题:计算长度100位以内的 20进制的加法
分析:用字符串存储 A,B 再两位两位的做加法运算,注意进位怎么处理。
源码:
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <string>
- #include <algorithm>
- /*
- *author : husiwen
- *function : 计算长度100位以内的 20进制的加法
- *Program idea:
- *(1)先把加数和被加数反转,再从第0位开始
- *(2)到末尾两位依次相加;
- *(3)每两位的结果放置于一向量表中,
- *(4)待全部完成后,逆序输出;
- */
- using namespace std;
- int main(int argc,char * argv[])
- {
- //ifstream cin("aaa.txt");
- string sa,sb,t;
- vector<int> v;
- int i;
- int a,b,sum;
- int flag;
- while (cin>>sa>>sb)
- {
- flag = 0; //没有进位
- v.clear(); // 清空结果向量
- sum = 0; //置结果为0
- //反转两个字符串
- reverse(sa.begin(),sa.end());
- reverse(sb.begin(),sb.end());
- if(sa.size()<sb.size())//sa中放长字符,sb中放短字符;
- {
- t=sa;
- sa=sb;//交换算法:再常用不过了。
- sb=t;
- }
- for(i=0;i<sa.size();i++)
- {
- //20进制的表示 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19;
- // 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j
- if (sa[i]=='0') a=0;
- else if(sa[i]=='1') a=1;
- else if(sa[i]=='2') a=2;
- else if(sa[i]=='3') a=3;
- else if(sa[i]=='4') a=4;
- else if(sa[i]=='5') a=5;
- else if(sa[i]=='6') a=6;
- else if(sa[i]=='7') a=7;
- else if(sa[i]=='8') a=8;
- else if(sa[i]=='9') a=9;
- else if(sa[i]=='a') a=10;
- else if(sa[i]=='b') a=11;
- else if(sa[i]=='c') a=12;
- else if(sa[i]=='d') a=13;
- else if(sa[i]=='e') a=14;
- else if(sa[i]=='f') a=15;
- else if(sa[i]=='g') a=16;
- else if(sa[i]=='h') a=17;
- else if(sa[i]=='i') a=18;
- else if(sa[i]=='j') a=19;
- if(i>sb.size()) b=0;
- else
- {
- if (sb[i]=='0') b=0;
- else if(sb[i]=='1') b=1;
- else if(sb[i]=='2') b=2;
- else if(sb[i]=='3') b=3;
- else if(sb[i]=='4') b=4;
- else if(sb[i]=='5') b=5;
- else if(sb[i]=='6') b=6;
- else if(sb[i]=='7') b=7;
- else if(sb[i]=='8') b=8;
- else if(sb[i]=='9') b=9;
- else if(sb[i]=='a') b=10;
- else if(sb[i]=='b') b=11;
- else if(sb[i]=='c') b=12;
- else if(sb[i]=='d') b=13;
- else if(sb[i]=='e') b=14;
- else if(sb[i]=='f') b=15;
- else if(sb[i]=='g') b=16;
- else if(sb[i]=='h') b=17;
- else if(sb[i]=='i') b=18;
- else if(sb[i]=='j') b=19;
- }
- sum = a+b+flag ;
- if(sum>19)
- {
- flag = 1; //进位
- sum =sum -20; //保留位
- }
- else
- {
- flag = 0;
- }
- v.push_back(sum);//保存保留位
- //每两位的数值相加后进入向量v中;
- }
- if (flag == 1) v.push_back(1);
- //输出结果
- for(i =v.size()-1; i>=0 ; i--)
- {
- if(v[i]<10) cout<<v[i];
- //判断输出
- else if(v[i]==10) cout<<"a";
- else if(v[i]==11) cout<<"b";
- else if(v[i]==12) cout<<"c";
- else if(v[i]==13) cout<<"d";
- else if(v[i]==14) cout<<"e";
- else if(v[i]==15) cout<<"f";
- else if(v[i]==16) cout<<"g";
- else if(v[i]==17) cout<<"h";
- else if(v[i]==18) cout<<"i";
- else if(v[i]==19) cout<<"j";
- }
- cout<<endl;
- }
- return 0;
- }
测试结果:
- 12355669998779
- 12335340084958204
- 124476956edieg97d
- 12354892134095873405acb
- abc
- 1235489213409587340g143