#include <bits/stdc++.h> using namespace std; //高精比较 bool cmp(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]; } return true; } //高精加法 vector<int> add(vector<int> &A, vector<int> &B) { if(A.size()<B.size()) return add(B, A);//让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(1); return C; } //高精减 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];//t=A[i]-借位-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();//去除多余前导0 return C; } //高精乘低精 vector<int> mul(vector<int> &A, int b) { vector<int> C; int t=0; for(int i=0; i<A.size()||t; i++) { if(i<A.size())t+=A[i]*b; C.push_back(t%10); t/=10; } while(C.size()>1 && C.back()==0) C.pop_back();//去除前导0 return C; } //高精除低精 vector<int> div(vector<int> &A,int b,int &r)//r为引用 { vector<int> C; r=0; for(int i=A.size()-1;i>=0;i--) { r=r*10+A[i]; C.push_back(r/b); r%=b; } reverse(C.begin(),C.end());//为了形式上和加减法一致,即返回的为从个位到最高位顺序 while(C.size()>1 && C.back()==0) C.pop_back(); 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--) cout<<C[i]; return 0; }
高精度,顾名思义就是当数据范围特别大时的算法,本质是模拟手算竖式
上面的代码不仅提供了题目要求的高精度整数加法,还提供了其他三种常见的四则运算,写法很短,适合当板子