1)高精度模板
--加法
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B){
vector<int> C;
int lena = A.size();
int lenb = B.size();
int length = lena > lenb?lena:lenb;
int t=0;
for(int i=0;i<length;i++){
if(i<lena) t += A[i];
if(i<lenb) t += B[i];
C.push_back(t%10);
t /=10;
}
if(t>10) C.push_back(1);
return C;
}
int main(){
string a,b;
cin>>a>>b;
int lena = a.length();
int lenb = b.length();
vector<int> A,B,C;
for(int i=lena-1;i>=0;i--)
A.push_back(a[i] - '0'); //重点遗忘部分
for(int i=lenb-1;i>=0;i--)
B.push_back(b[i] - '0'); //重点遗忘部分
C = add(A,B);
for(int i=C.size()-1;i>=0;i--)
cout<<C[i];
return 0;
}
--减法
#include<iostream>
#include<vector>
using namespace std;
//减法需要的注意点为
//负号的舍去
//前导零的删除
bool com(vector<int> A,vector<int> B){
//长度不一样 直接比较长度
if(A.size() !=B.size()) return A.size() > B.size();
else{ //长度不一样 每一位开始比较
for(int i=A.size()-1;i>=0;i--)
if(A[i] != B[i]) return A[i] > B[i];
}
return true;
}
//高精度减法 输出的值为绝对值
vector<int> sub(vector<int> A,vector<int> B){
vector<int> C; //用来返回结果
if(!com(A,B)) return sub(B,A); //返回计算 说实话 这一步有点帅
int t=0; //是否借位
for(int i=0;i<A.size();i++){
t = A[i]-t;
if(i<B.size()) t = t-B[i];
C.push_back((t+10) % 10);
//判断是否借位
if(t<0) t = 1;
else t = 0;
}
//去除先导0
while(C.size() > 1 && C.back()==0) C.pop_back();
return C;
}
int main(){
string a,b;
vector<int> A,B,C;
cin>>a>>b;
//将a,b倒叙存储刀A,B之中
int lena = a.size();
int lenb = b.size();
for(int i=lena-1;i>=0;i--) A.push_back(a[i]-'0');
for(int i=lenb-1;i>=0;i--) B.push_back(b[i]-'0');
C = sub(A,B);
if(!com(A,B)) cout<<"-";
for(int i=C.size()-1;i>=0;i--) cout<<C[i];
return 0;
}
博主自己备赛总结了关于蓝桥杯的模板,有需要的同学点赞关注评论区领取啦!