大整数加法
前言
记录学习的过程
题目
Chapter 2, HLOJ 9515,例2.5.2 大整数加法
输入2个大正整数(长度可能达到1000位),求两者之和。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据输入两个正整数A和B。
输出格式:
对于每组测试,在一行上输出A+B的结果。
输入样例:
2222222222 44444444444
输出样例:
46666666666
代码
#include<bits/stdc++.h>
using namespace std;
list<int> addlist(list<int> La,list<int> Lb){
list<int> Lc;
list<int>::iterator it1,it2;
it1=La.begin();
it2=Lb.begin();
int carry=0; //进位
while(it1!=La.end()||it2!=Lb.end()){
int c=carry;
if(it1!=La.end())
{
c = c + (*it1);
it1++;
}
if(it2!=Lb.end())
{
c = c + (*it2);
it2++;
}
carry=c/10; //保留进位;
Lc.push_back(c%10); //将相加之和取个位从尾部插入;
}
if(carry>0)Lc.push_back(carry);//循环结束时,若还有进位从尾部插入;
return Lc;
}
int main(){
string A,B;
while(cin>>A>>B)
{
list<int> La,Lb,Lc;
for(int i=0;i<A.size();i++) La.push_front(A[i]-'0'); //将A以倒装的方式加入到La中:
for(int i=0;i<B.size();i++) Lb.push_front(B[i]-'0'); //同理将B以倒装方式加入到Lb中;
Lc=addlist(La,Lb);
Lc.reverse(); //将Lc倒装;
for(list<int>::iterator it=Lc.begin();it!=Lc.end();it++){
cout<<*it;
}
cout<<endl;
}
}