C++
$\color{#cc33ff}{— > 算法基础课题解}$
思路:
高精度加法:高精度 + 高精度
$\color{blue}{易懂版}$
#include<bits/stdc++.h>
#include <vector>
using namespace std;
const int N = 1e6 + 10;
// C = A + B
vector<int> add(vector<int> &A, vector<int> &B){
vector<int> C;
int t = 0; // 上一位的进位
for (int i = 0; i < A.size() || i < B.size(); i ++){
if (i < A.size()) t += A[i]; // 如果A[i]还有的话,t + A[i]
if (i < B.size()) t += B[i]; // 如果B[i]还有的话,t + B[i]
// 此时t里面存的就是A[i] + B[i] + 上一位的进位
C.push_back(t % 10); // 如果t > 10,存t的余数
t /= 10; // 看一下是否要进位到下一位,如果 >= 10 ,t = 1,如果 < 10的话,就是0
}
if (t) C.push_back(1); // 看一下最高位有没有进位,有的话,补上一个1
return C;
}
int main(){
string a, b;
vector<int> A, B;
cin >> a >> b; // a = "123456"
for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');//A = [6, 5, 4, 3, 2, 1]
for (int j = b.size() - 1; j >= 0; j --) B.push_back(b[j] - '0');
vector<int> C = add (A, B); // auto C = add(A, B); auto : 编译器会自动推断这个变量是什么类型
for (int i = C.size() - 1; i >= 0; i --) printf("%d", C[i]);
return 0;
}
$\color{red}{易记版}$
#include<bits/stdc++.h>
#include <vector>
using namespace std;
const int N = 1e6 + 10;
// C = A + B
vector<int> add(vector<int> &A, vector<int> &B){
vector<int> C;
int t = 0;
for (int i = 0; i < A.size() || i < B.size(); i ++){
if (i < A.size()) t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % 10);
t /= 10;
}
if (t) C.push_back(1);
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 j = b.size() - 1; j >= 0; j --) B.push_back(b[j] - '0');
vector<int> C = add (A, B);
for (int i = C.size() - 1; i >= 0; i --) printf("%d", C[i]);
return 0;
}
orz