vector<int>add(vector<int>&A, vector<int>&B){if(A.size()< B.size())returnadd(B, A);
vector<int> C;int t =0;for(int i =0; i < A.size(); i ++){
t += A[i];if(i < B.size()) t += B[i];
C.push_back(t %10);
t /=10;}if(t) C.push_back(t);return C;}
大数相减
// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int>sub(vector<int>&A, vector<int>&B){
vector<int> C;for(int i =0, t =0; i < A.size(); i ++){
t = A[i]- t;if(i < B.size()) t -= B[i];
C.push_back((t +10)%10);if(t <0) t =1;else t =0;}while(C.size()>1&& C.back()==0) C.pop_back();return C;}
二、大数加减编程题
AcWing 791. 高精度加法
#include<bits/stdc++.h>usingnamespace std;
vector<int>add(vector<int>&A, vector<int>&B){if(A.size()< B.size())returnadd(B, A);
vector<int> C;int t =0;for(int i =0; i < A.size(); i ++){
t += A[i];if(i < B.size()) t += B[i];
C.push_back(t %10);
t /=10;}if(t) C.push_back(t);return C;}intmain(){
string a,b;
cin>>a>>b;
vector<int> A;
vector<int> 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');
vector<int> C=add(A,B);for(int i=C.size()-1;i>=0;i--)printf("%d",C[i]);return0;}
AcWing 792. 高精度减法
#include<bits/stdc++.h>usingnamespace std;//判断A>=Bboolcmp(vector<int>&A,vector<int>&B){if(A.size()!=B.size())return A.size()>B.size();for(int i=A.size()-1;i>=0;i--){if(A[i]!=B[i]){return A[i]>B[i];}}returntrue;}// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int>sub(vector<int>&A, vector<int>&B){
vector<int> C;for(int i =0, t =0; i < A.size(); i ++){
t = A[i]- t;if(i < B.size()) t -= B[i];
C.push_back((t +10)%10);if(t <0) t =1;else t =0;}while(C.size()>1&& C.back()==0) C.pop_back();return C;}intmain(){
string a,b;
cin>>a>>b;
vector<int> A;
vector<int> 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');if(cmp(A,B)){
vector<int> C=sub(A,B);for(int i=C.size()-1;i>=0;i--)printf("%d",C[i]);}else{
vector<int> C=sub(B,A);printf("-");for(int i=C.size()-1;i>=0;i--)printf("%d",C[i]);}return0;}