1. 程式人生 > >那一波高精度

那一波高精度

高精度是個好東西, 不會的話似乎沒什麼大事,很多題目卡資料都是要打高精的,比如那個鬼畜的國王遊戲
下面我們來看一下高精度程式碼(字串轉陣列部分省略)

//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--
;