目录
一.高精度介绍
通常,我们只会用string去做关于字符串的题,但是高精度还有另外一个用法,那就是高精度。众所周知,int的范围是-2147483648到2147483647,long long的范围是-2^63到2^63-1。但是有一些题它的范围大于int和long long的范围,这是就需要高精度来帮忙。这是它的定义:
二.模板
高精加:
#include<bits/stdc++.h>
using namespace std;
string a,b;
int s1[255],s2[255],s3[255];
int main(){
cin>>a>>b;
int len1=a.size();
int len2=b.size();
for(int i=0;i<len1;i++){
s1[i]=a[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
s2[i]=b[len2-i-1]-'0';
}
int maxn=max(len1,len2);
int x=0;
for(int i=0;i<=maxn;i++){
s3[i]=s1[i]+s2[i]+x;
x=s3[i]/10;
s3[i]%=10;
}
if(s3[maxn]>0) maxn++;
for(int i=maxn-1;i>=0;i--) cout<<s3[i];
return 0;
}
高精减:
#include<bits/stdc++.h>
using namespace std;
string a,b;
int s1[114514],s2[114514],s3[114514];
int main(){
cin>>a>>b;
int len1=a.size();
int len2=b.size();
int maxn=max(len1,len2);
if(len1<len2){
cout<<"-";
swap(a,b);
swap(len1,len2);
}
if(len1==len2){
for(int i=0;i<maxn;i++){
if(a[i]<b[i]){
swap(a,b);
swap(len1,len2);
cout<<"-";
break;
}
}
}
for(int i=0;i<len1;i++){
s1[i]=a[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
s2[i]=b[len2-i-1]-'0';
}
for(int i=0;i<=maxn;i++){
if(s1[i]-s2[i]<0){
s1[i]+=10;