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