题目描述
实现一个加法器,使其能够输出a+b的值。
输入
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入
6 8
2000000000 30000000000000000000
样例输出
14
30000000002000000000
思路
这是一道经典的大整数运算题目,非常的棒!
1.位数最高可达1000位,所以一定要用字符串解决,字母与数字的转换为:字母-‘0’=数字,如:‘1’-‘0’=1;
2.进位处需要好好的考虑一下,易错,尤其是考虑两个位数相同的大整数相加时,容易落下最高位进位;
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
while(cin>>a>>b)
{
vector<int>c;
vector<int>d;
vector<int>e;
int temp=0,count;
int cha=a.length()-b.length();
cha=abs(cha);
if(a.length()>=b.length() && cha!=0){
for(int i=1;i<=cha;i++)
b='0'+b;
}
if(a.length()<b.length() && cha!=0){
for(int i=1;i<=cha;i++)
a='0'+a;
}
for(int i=0;i<a.size();i++)
{
c.push_back(a[a.size()-i-1]-'0');
}
for(int j=0;j<b.size();j++)
d.push_back(b[b.size()-j-1]-'0');
for(int i=0;i<c.size();i++)
{
e.push_back((c[i]+d[i]+temp)%10);//要对10取余
if(c[i]+d[i]+temp>=10)
temp=1;
else
temp=0;
}
if(temp==1)//容易丢下这一步,当位数相同的两数相加时,最高位的进位
e.push_back(1);
for(int i=e.size()-1;i>=0;i--)
cout<<e[i];
cout<<endl;
}
}
也可以用栈实现