C++大数加法——最简单实现
高精度加法
题目描述
给定两个整数 和 ,请你求出这两个整数的和。
输入描述
输入两个正整数 a,b, a和b都不超过100位。
输出描述
输出两数之和
输入样例
1
2
输出样例
3
输入样例
1234567890123456789
9876543210987654321
输出样例
11111111101111111110
思路及代码
#include<iostream>
#include<vector>
#include<algorithm>
//#define DEBUG true
using namespace std;
const int maxLine = 100+10;
void initRedict(){#ifdef DEBUGcout<<"执行重定向"; 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;
}