《高精度加法》

67 阅读1分钟
#include <iostream>
#include <vector>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B)//加上取地址符号,起到引用的作用,不会再复制一整个可变数组。 
{ 
   vector<int> C;
   int tmp = 0;//表示当前位数的值 。 
   for (int i = 0; i < A.size() || i < B.size(); i ++)//如果i小于A的位数或者B的位数就结束循环。 
   { 
      if (i < A.size()) tmp += A;
      if (i < B.size()) tmp += B; //求出当前位数的和。 
      C.push_back(tmp % 10);
      tmp /= 10; //将当前不能进位的数记录到C中,使tmp变成进位的值。 
   } 
    if (tmp) C.push_back(1);//如果当前进位的值不为零,则最高位进一位。 
    return C;//返回两者的和。
} 
int main() 
{ 
   string a, b;
   cin >> a >> b; //读入两个全是数字的字符串。 
   vector<int> A, B; //定义两个可变数组。 
   for (int i = a.size() - 1; i >= 0; i --) 
   A.push_back(a - '0'); 
   for (int i = b.size() - 1; i >= 0; i --)
   B.push_back(b - '0'); //将有数字构成的字符串转化为数字,注意个位应当在0的位置,从左至右位数逐渐增加。 
   auto C = add(A, B);//对两个数字进行高精度求和。 
   for (int i = C.size() - 1; i >= 0; i --) cout << C;//从最高位输出结果。 
   return 0;
}