题目描述
给定两个正整数(不含前导 0),计算它们的和。
输入样例
12
23
输出样例
35
算法
高精度加法应该还算是简单的,它就像是我们小学学过的加法竖式计算,一位一位的加,某一位的得数大于十就向前进1位。
根据上面讲的,我们应该有两个很大的数组,讲两个数一位一位的存入数组中,开始我们可以用字符串来输入,这样一位一位提出来比较方便,存储这些数可以用vector数组(STL动态数组),所以要记得带上一个vector的头(当然你用万能头就随意)。
将两个数组一位一位相加,t存每一位的得数,然后将t%10的结果存入数组C当中,后将t再除以10,如果t仍然不为零,就将下一位+1,以此类推,再将数组C输出,就是结果了。
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
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 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 -- ) printf("%d", C[i]);
return 0;
}