那一波高精度

高精度是个好东西, 不会的话似乎没什么大事,很多题目卡数据都是要打高精的,比如那个鬼畜的国王游戏
下面我们来看一下高精度代码(字符串转数组部分省略)

//A+B
int l=max(l1,l2);
FOR(i,1,l) {
	c[i]=a[i]+b[i];
	c[i+1]=c[i]/10;
	c[i]%=10;
	if(c[l+1]) ++l;
}
//A-B
if(l1==l2&&s1<s2||l1<l2) {cout<<"-";swap(s1,s2);}
....
int l=l1;
FOR(i,1,l) {
	if(a[i]>b[i]) c[i]=a[i]-b[i];
	else a[i]+=10,a[i+1]--,c[i]=a[i]-b[i];
}
while(!c[l]&&l!=1) l--; //去前导0
//A*B
FOR(i,1,l1) FOR(j,1,l2) { //第i位和第j位相乘数字再第i+j位
	c[i+j]+=a[i]*b[j];
	c[i*j+1]+=a[i*j]/10;
	a[i*j]%=10
}
//A/B(低精)
int d=0;
ROF(i,n,1) {
	c[i]=(a[i]+d)/b;
	d=(a[i]+d)%b*10;
}
while(l>1 && !c[l]) l--; 

猜你喜欢

转载自blog.csdn.net/weixin_43464026/article/details/83832393