实现两个大整数相加的方法很简单,就是模拟小学生列竖式做加法,从个位开始逐位相加,超过或达到10则进位,程序中使用变量carry存储1或0。然后逐位相加,相加的结果直接存放在result中。要注意处理进位。
STL代码如下:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l1;//输入1
list<int> l2;//输入2
list<int> result;//结果
int carry = 0;//进位
l1.push_back(2);
l1.push_back(4);
l1.push_back(3);
l2.push_back(4);
l2.push_back(6);
l2.push_back(5);
l2.push_back(1);
list<int>::iterator iter1, iter2;
iter1 = l1.begin();
iter2 = l2.begin();
//计算加法,使用一个进位carry存储
while(iter1!=l1.end() && iter2!=l2.end())
{
int value = *iter1 + *iter2 + carry;
carry = value / 10;
result.push_back( value % 10);
iter1++;
iter2++;
}
//两个输入长度不同时,将超出的部分直接赋值给结果
while(iter1!=l1.end())
{
result.push_back(*iter1);
iter1++;
}
while(iter2!=l2.end())
{
result.push_back(*iter2);
iter2++;
}
//打印
cout << "输入1:";
for(list<int>::reverse_iterator iter1=l1.rbegin();
iter1 != l1.rend();
++iter1)
{
cout << *iter1;
}
cout << endl << "输入2:";
for(list<int>::reverse_iterator iter2=l2.rbegin();
iter2 != l2.rend();
++iter2)
{
cout << *iter2;
}
cout << endl << "结果:";
list<int>::reverse_iterator iter_res;
for(iter_res=result.rbegin();
iter_res != result.rend();
++iter_res)
{
cout << *iter_res;
}
cout << endl;
system("pause");
return 0;
}