__int128:懒人的福音

前言

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

发表评论

相关文章