高精度加法
题目描述
给定两个整数 和 ,请你求出这两个整数的和。
输入描述
输入两个正整数 a,b, a和b都不超过100位。
输出描述
输出两数之和
输入样例
1
2
输出样例
3
输入样例
1234567890123456789
9876543210987654321
输出样例
11111111101111111110
思路及代码
cpp
#include<iostream>
#include<vector>
#include<algorithm>
//#define DEBUG true
using namespace std;
const int maxLine = 100+10;
void initRedict(){
#ifdef DEBUG
cout<<"执行重定向";
freopen("../redict/demo/demo_in.txt","r",stdin);
#endif
}
string a,b;
vector<int> revVecA,revVecB;
int sumNums[maxLine];
int main(){
initRedict();
cin>>a>>b;
// 逆序读取 录入容器
for(int i=a.size()-1;i>=0;i--) revVecA.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--) revVecB.push_back(b[i]-'0');
// 获取a,b字符串长短 (如果有负数就需要使用其他方法判断了)
// 这里适用于正大数加法
int maxlen=max(a.size(),b.size());
int minlen=min(a.size(),b.size());
// 计算主体
int jinwei=0;
for(int i=0;i<maxlen;i++){
int addNums;
if (i<minlen) addNums=revVecA[i]+revVecB[i];
else if (a.size()>=b.size()) addNums=revVecA[i];
else addNums=revVecB[i];
sumNums[i]+=(addNums+jinwei)%10;
jinwei=(addNums+jinwei)/10;
}
// 末尾特判
sumNums[maxlen]=jinwei;
if (jinwei) maxlen++;
//输出res
for(int i=maxlen-1;i>=0;i--){
cout<<sumNums[i];
}
return 0;
}