__int128:懒人的福音

时间:2023-01-24 17:04:12

前言

对于一个懒懒的,不想写高精的人(就是我),每次都会遭遇到答案爆$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$过不掉时,还是老老实实打高精吧!