高精度加减法计算
1.高精度加法
模板:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int N=1e6+10;
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=t/10;
}
if(t)c.push_back(1);//不要忘记
return c;
}
int main() {
string a,b;
cin>>a>>b;
vector<int> a1,b1;
for(int i=a.size()-1;i>=0;i--)a1.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)b1.push_back(b[i]-'0');
auto c=add(a1,b1);
for(int i=c.size()-1;i>=0;i--){
cout<<c[i];
}
return 0;
}
高精度减法
该代码只适用输入的两个数是正整数,其他情况可转化为绝对值的加减法来处理
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//输入的两个数都必须时正整数,其他情况可转换为正整数的情况处理
bool cmp(vector<int> &a,vector<int> &b){//判断是否满足A>=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> sub(vector<int> &a,vector<int> &b){
int t=0;
vector<int> c;
int n=a.size()-1;
for(int i=0;i<=n;i++){//注意判断条件
t=a[i]-t;
if(i<b.size())t-=b[i];
c.push_back((t+10)%10);//t大于和小于0两种情况合并处理
if(t<0)t=1;
else t=0;//注意别忘了
}
//去除前导0
while(c.size()>1&&c.back()==0)c.pop_back();//最后一个0要保留
return c;
}
int main() {
string a,b;
cin>>a>>b;
vector<int> a1,b1;
for(int i=a.size()-1;i>=0;i--)a1.push_back(a[i]-'0');
for(int i=b.size()-1;i>=0;i--)b1.push_back(b[i]-'0');
if(cmp(a1,b1)){
auto c=sub(a1,b1);
for(int i=c.size()-1;i>=0;i--){
cout<<c[i];
}
}
else{
cout<<"-";
auto c=sub(b1,a1);
for(int i=c.size()-1;i>=0;i--){
cout<<c[i];
}
}
return 0;
}