前言
这篇博客并不打算多细致地讲解高精度,但是!但是!我会给出代码模板,并且在注释中讲解大多数内容。
就这样吧。( ̄︶ ̄)
思路
emmm小学数学会吧?不会您先别看了 就用小学数学的思路做就完事了。
代码
加法
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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); if(t<0)t=-1; else t=0; } while(c.size()>1&&c.back()==0)c.pop_back(); return c; }
|
完结撒花o( ̄︶ ̄)o