题目描述
利用字符串和vector来实现高位数的加法
我们需要知道一个基本的数学常识:十进制中,借用的数最大只能是10而已,也就是在临近的高位上+1.不会出现比10更大的20,30…;
而为了避免字符串越界的NULL,以及‘9’+1 == ‘:’的尴尬更是不再复杂地讨论,所以考虑用一个整数作为容器去作位数相加的操作.
如果相加之后的字符串的位数比两个字符串都大,那么一定还要再进1,单独判断然后push_back()即可
样例
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
const int N = 110;
typedef pair<int, int> pii;
string a, b;
vector<int> ans;
void highAccuracyAddition()
{
reverse(a.begin(), a.end()); reverse(b.begin(), b.end());
int jiashu, signal = 0;
for (int i = 0; i < a.size() || i < b.size(); i++)//设计一个算法不用那么复杂的;
{
jiashu = 0;
if (signal == 1) jiashu += signal, signal = 0;
jiashu += ((((i < a.size()) ? (a[i] - '0') : 0 )+ ((i < b.size()) ? (b[i] - '0') : 0)));
if (jiashu >= 10) signal = 1;
int houshu = jiashu % 10;
ans.push_back(houshu);
}
if (signal != 0) ans.push_back(1);
reverse(ans.begin(), ans.end());
for (int i = 0; i < ans.size(); i++) cout << ans[i];
cout << "\n";
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0); std::cout.tie(0);
cin >> a >> b;//这么大的数据长度只有字符串了
highAccuracyAddition();
return 0;
}
算法没有像它的名字那样高大上,有些我们自己就可以想出来,有些就像是定理公理,需要站在巨人的肩膀上,比如KMP算法,没有几个人是几乎-想不出来的