__int128:懶人的福音

2023-01-24 18:00:17

前言

對於一個懶懶的,不想寫高精的人(就是我),每次都會遭遇到答案爆$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$過不掉時,還是老老實實打高精吧!