原题目链接:洛谷 P1601
输入样例·1:
1
1
输出样例·1:
2
输入样例·2:
1001
9099
输出样例·2:
10100
思路:
数字太大,使用高精度加法,要考虑进位机制。
一、<vector>(但是没过完样例)
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
using namespace std;
vector<int>add(vector<int>& A, vector<int>& B) {
if (A.size() < B.size())return add(B, A);
vector<int>C;
int t = 0;
for (int i = 0; i < A.size(); i++) {
t += A[i];
if (i < B.size())t += B[i];
C.push_back(t % 10);
t /= 10;
}
if (t)C.push_back(t);
return C;
}
int main() {
string a, b;
vector<int>A, B;
cin >> a >> b;
for (int i = a.size() - 1; i>=0; i--)A.push_back(a[i] - '0');
for (int i = b.size() - 1; i>=0; i--)B.push_back(b[i] - '0');
auto C = add(A, B);
for (int i = C.size() - 1; i>=0; i--)cout << C[i];
cout << endl;
return 0;
}
二、数组(过完样例)(此处搬一个dalao的题解)
#include <iostream>
using namespace std;
const int N = 100010;
int A[N], B[N], C[N];
int Add(int a[], int b[], int c[], int cnt) {
int t = 0;//t表示进位
for (int i=1; i<=cnt; i++) {
t += a[i] + b[i];//进位加上a和b第i位上的数
c[i] = t % 10;//c的值就是进位的个位数
t /= 10;//把t的个位数去掉只剩下十位数,即只剩下这个位置的进位
}
if (t) c[++cnt] = 1;//如果t==1,表示还有一个进位,要补上
return cnt;
}
int main() {
string a, b;
cin >> a >> b;
//A和B倒着放进int数组,因为有进位,倒着放容易处理
int cnt1 = 0;
for (int i=a.size()-1; i>=0; i--)
A[++cnt1] = a[i] - '0';
int cnt2 = 0;
for (int i=b.size()-1; i>=0; i--)
B[++cnt2] = b[i] - '0';
int tot = Add(A, B, C, max(cnt1, cnt2));
//因为A和B是倒着放的,所以C也要倒着输出
for (int i=tot; i>=1; i--)
cout << C[i];
}