最近蒟蒻刚学了高精算法,来发个模板吧!
高精加(HAA)【模板】
1 #include<bits/stdc++.h> 2 using namespace std; 3 string x,y; 4 int a[100010],b[100010],c[100010],xa,xb,xc; 5 /*数组大小根据题目数据范围大小确定 6 此模板只适用于0≤x,y≤10^(10^5)的情况*/ 7 int main(){ 8 cin>>x>>y; 9 xa=x.length(),xb=y.length(); 10 xc=max(xa,xb); 11 for(int i=0;i<xa;i++) a[xa-i]=x[i]-'0'; 12 for(int i=0;i<xb;i++) b[xb-i]=y[i]-'0'; 13 for(int i=1;i<=xc;i++){ 14 c[i]+=a[i]+b[i]; 15 c[i+1]=c[i]/10; 16 c[i]%=10; 17 } 18 if(c[xc+1]) xc++; 19 for(int i=xc;i>=1;i--) cout<<c[i]; 20 return 0; 21 }
高精减(HAS)【模板】
1 #include<bits/stdc++.h> 2 using namespace std; 3 string x,y; 4 int a[100010],b[100010],c[100010],xa,xb; 5 /*数组大小根据题目数据范围大小确定 6 此模板只适用于0≤x,y≤10^(10^5)的情况*/ 7 int main(){ 8 cin>>x>>y; 9 xa=x.length(),xb=y.length(); 10 if(xa<xb||xa==xb&&x<y){ 11 swap(x,y); 12 swap(xa,xb); 13 cout<<"-"; 14 } 15 for(int i=0;i<xa;i++) a[xa-i]=x[i]-'0'; 16 for(int i=0;i<xb;i++) b[xb-i]=y[i]-'0'; 17 for(int i=1;i<=xa;i++){ 18 if(a[i]<b[i]){ 19 a[i]+=10; 20 a[i+1]--; 21 } 22 c[i]=a[i]-b[i]; 23 } 24 while(c[xa]==0&&xa>1) xa--; 25 for(int i=xa;i>=1;i--) cout<<c[i]; 26 return 0; 27 }
高精乘(HAM)【模板】
1 #include<bits/stdc++.h> 2 using namespace std; 3 string x,y; 4 int a[100010],b[100010],c[200010],xa,xb,xc; 5 /*数组大小根据题目数据范围大小确定 6 此模板只适用于0≤x,y≤10^(10^5)的情况*/ 7 int main(){ 8 cin>>x>>y; 9 xa=x.length(),xb=y.length(); 10 xc=xa+xb; 11 for(int i=0;i<xa;i++) a[xa-i]=x[i]-'0'; 12 for(int i=0;i<xb;i++) b[xb-i]=y[i]-'0'; 13 for(int i=1;i<=xa;i++){ 14 for(int j=1;j<=xb;j++){ 15 c[i+j-1]+=a[i]*b[j]; 16 c[i+j]+=c[i+j-1]/10; 17 c[i+j-1]%=10; 18 } 19 } 20 while(c[xc]==0&&xc>1) xc--; 21 for(int i=xc;i>=1;i--) cout<<c[i]; 22 return 0; 23 }