高精度加法

51 阅读1分钟
#include <iostream>  
#include <vector>  
using namespace std;  
vector<int> add(vector<int> &A,vector<int> &B){  
int t = 0;  
vector<int> C;  
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];  
//进位 13 进1余3 t保留着进的数字,下次循环会加上去  
C.push_back(t % 10);  
t /= 10;  
}  
// 两个数字都加完但可能还有一个t没进位  
if(t) C.push_back(t);  
// if(t) C.push_back(1);  
return C;  
}  
int main(){  
string x, y;  
cin >> x >> y;  
vector<int> X,Y;  
// 为什么要逆序? 我们是从个位开始加的,两个数的位次可能不一样,不逆序的话,123的个位就是Array[2],而12345的个位就是Array[4]  
for(int i = x.size() - 1;i >= 0;i--) X.push_back(x[i] - '0');  
for(int i = y.size() - 1;i >= 0;i--) Y.push_back(y[i] - '0');  
vector<int> C = add(X,Y);  
for(int i = C.size() - 1;i >= 0;i--) cout << C[i];  
}