前言 對於一個懶懶的,不想寫高精的人(就是我),每次都會遭遇到答案爆$long$ $long$的危險 比如說這道題: 題目傳送門 最後的$23-25$的兩個點,$long$ $long$甚至$unsigned$ $long$ $long$都無法滿足,難道真的要手打高精度了嗎? 不,我們有$\_$$\ ...
前言
對於一個懶懶的,不想寫高精的人(就是我),每次都會遭遇到答案爆$long$ $long$的危險
比如說這道題:
題目傳送門
最後的$23-25$的兩個點,$long$ $long$甚至$unsigned$ $long$ $long$都無法滿足,難道真的要手打高精度了嗎?
不,我們有$\_$$\_$$int$$128$!
那麼這到底是什麼 可以吃嗎 ?
關於$\_$$\_$$int$$128$
先來看看一些常見的整數變數能存的範圍與占用的位元組:
類型名稱 | 占用位元組 | 存儲範圍 |
$int$ | $4$ | $-2^{31}$ ~ $2^{31}-1$ |
$long$ $long$ | $8$ | $-2^{63}$ ~ $2^{63}-1$ |
$unsigned$ $long$ $long$ | $8$ | $0$ ~ $2^{64}-1$ |
再來看看$\_$$\_$$int$$128$
存儲範圍為$-2^{127}$ ~ $2^{127}-1$,但是占用了$128$位元組
雖然記憶體占的多,但存儲範圍依然多
那麼如何使用?
輸入
其實就是把快讀輸入改了一改
__int128 read() { __int128 x=0; char ch=getchar(); while(ch<'0' || ch>'9') ch=getchar(); while('0'<=ch && ch<='9') x=x*10+ch-'0',ch=getchar(); return x; }
...
__int128 n=read();
輸出
其實也是把快輸改了一改
void write(__int128 x) { if(x<0) x=-x,putchar('-'); if(x>9) write(x/10); putchar(x%10+'0'); } __int128 n; n=... write(n);
寫在最後
$\_$$\_$$int$$128$是好,但是用的時候一定一定要註意空間限制!
當然,$\_$$\_$$int$$128$並不能完全取代高精,所以如果$\_$$\_$$int$$128$過不掉時,還是老老實實打高精吧!