[编程笔记]-High_Precision(Add and Sub)高精度加减法

前言

这篇博客并不打算多细致地讲解高精度,但是!但是!我会给出代码模板,并且在注释中讲解大多数内容。

就这样吧。( ̄︶ ̄)

思路

emmm小学数学会吧?不会您先别看了 就用小学数学的思路做就完事了。

代码

加法

1
2
3
4
5
6
7
8
9
10
11
12
13
//这里使用vector储存大数,因为它自带size函数,当然直接用数组也没有问题。
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(t);//最后可能还剩一个进位,不要忘了加回去。
return c;
}

update 2024/7/29: 一种更简洁的写法

1
2
3
4
5
6
7
8
9
10
11
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()||t;i++){
if(i<a.size())t+=a[i];
if(i<b.size())t+=b[i];
c.push_back(t%10);
t/=10;
}
return c;
}

减法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//同上
//此函数用于判断两个大数大小,下方的减法函数只支持大减小。
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> sub(vector<int> &a,vector<int> &b){
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)%10);//此处浓缩了两种可能:t<0,返回t+10;t≥0,返回t。
if(t<0)t=-1;
else t=0;
}
while(c.size()>1&&c.back()==0)c.pop_back();//删除前置0。当只剩一位时不删(不然0就没了)。
return c;
}

完结撒花o( ̄︶ ̄)o


[编程笔记]-High_Precision(Add and Sub)高精度加减法
http://githarlem.github.io/2024/07/28/High-Precision-AddSub/
作者
Harlem
发布于
2024年7月28日
更新于
2024年7月29日
许可协议