大整数加法

来源:互联网 发布:淘宝妹子爱吃的零食 编辑:程序博客网 时间:2024/06/01 23:27

       实现两个大整数相加的方法很简单,就是模拟小学生列竖式做加法,从个位开始逐位相加,超过或达到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;}
0 0
原创粉丝点击