在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下;
首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位
2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧 t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.
3.最后如果 t 不等于 0 的话,得到的数最后一位还得加上1
代码如下·(摘自acwing的y总思路)
#include <bits/stdc++.h> 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; //a = "123456" 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'); vector <int> C= add(A,B); for(int i = C.size() - 1;i >= 0;i --) printf("%d",C[i]); }