问题:计算长度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