C++里有普通的 32 位整数类型 int 和 64 位整数类型 long long,但是如果我们要存一个128位的整数,前两个似乎就无能为力了。这时候我们就要用到 __int128这种类型了。
大小
32 位整数 int 类型的范围是 -2147483648 到 2147483647,也就是 $-2^{31}$ 到 $2^{31}-1$。
64 位整数 long long 类型范围是 $-2^{63}$ 到 $2^{63}-1$。
那么 __iint128 类型的范围当然就是 $-2^{127}$ 到 $2^{127}-1$。当然这是个很大的数字了。
(我依稀记得,在 Pascal 下 128 位整数(不带符号)是qword……)
定义
对__int128 类型变量的定义与普通类型没有差别:
const __int128 x=312473910479474312;
__int128 a,b;
读入与输出
默认的 cin 和 cout 都是没法读入或者输出 __int128 类型的,都会报错。printf 里面似乎也没有 __int128 类型对应的编码,那么怎么办呢?最好的方法是自己写输出函数:
inline void write(__int128 x){
if(x>9) write(x/10);
putchar(x%10+'0');
}
用递归的方式,不需要另开空间存,很方便。
关于编译错误
据说在许多版本 gcc/g++ 里直接开 __int128 会编译错误(但是我在 Linux 下并没有遇到),但是在各大 OJ 的评测机上是不会出问题的。可以用洛谷的在线 IDE 尝试编译。
July 22nd, 2018 at 10:44 pm
qword是unsigned long long耶……
July 26th, 2018 at 09:19 am
这样子??一直被蒙骗了……