A+B Problem(高精)
题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。$a,b \leq 10^{500}$。
输出格式
输出只有一行,代表 $a+b$ 的值。
样例 #1
样例输入 #1
1
1
样例输出 #1
2
样例 #2
样例输入 #2
1001
9099
样例输出 #2
10100
思路
模拟十进制加法,逢10进一。
AC代码
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#define AUTHOR "HEX9CF"
using namespace std;
const int maxn = 100005;
void printv(vector<int> v){
vector<int>::iterator it = v.begin();
for(; it != v.end(); it++){
cout << *it;
}
}
int main() {
char ch;
string str1, str2;
stringstream ss1, ss2;
vector<int> v1, v2, v3;
cin >> str1 >> str2;
ss1 << str1;
ss2 << str2;
while(ss1 >> ch){
v1.push_back(ch - '0');
}
while(ss2 >> ch){
v2.push_back(ch - '0');
}
reverse(v1.begin(), v1.end());
reverse(v2.begin(), v2.end());
vector<int>::iterator it1 = v1.begin();
vector<int>::iterator it2 = v2.begin();
for(;it1 != v1.end() && it2 != v2.end();it1++, it2++){
int sum = *it1 + *it2;
v3.push_back(sum);
}
for(;it1 != v1.end();it1++){
v3.push_back(*it1);
}
for(;it2 != v2.end();it2++){
v3.push_back(*it2);
}
vector<int>::iterator it3 = v3.begin();
int flg = 0;
for(;it3 != v3.end(); it3++){
if (*it3 > 9)
{
*it3 -= 10;
if (v3.end() == it3 + 1)
{
flg = 1;
}
else
{
*(it3 + 1) += 1;
}
}
}
if(flg){
v3.push_back(1);
}
reverse(v3.begin(), v3.end());
printv(v3);
return 0;
}