您的位置:首页 > 其它

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

2010-10-13 15:46 274 查看
问题:计算长度100位以内的 20进制的加法

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

源码:

Code:

#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;

}

测试结果:

Code:

12355669998779

12335340084958204

124476956edieg97d

12354892134095873405acb

abc

1235489213409587340g143
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐