title: 关于 __int128
date: 2018-02-10 09:33:10
关于 __int128
众所周知:
int是32位,范围大概为10^9
long long(g++编译器), __int64(用%I64d控制,用scanf,printf比较好),都是64位扩展,范围大概是10^19
关于两种扩展的区别,参照链接
__int128是128位,大概10^38范围,用于处理大数,但它能不能使用取决于编译器,大部分OJ是支持的,只有在Linux环境下能够使用
gcc是不支持__int128这种数据类型的,比如在codeblocks 16.01也是无法编译的,但是提交到大部分OJ上是可以编译且能用的。C/C++标准IO是不认识__int128这种数据类型的,因此要自己实现IO,其他的运算,与int没有什么不同。
代码:
void read(__int128 &x)
{
x=0;
int f=1;
char ch;
if((ch=getchar())=='-')
f=-f;
else
x=x*10+ch-'0';
while((ch=getchar())>='0'&&ch<='9')
x=x*10+ch-'0';
x*=f;
}
void print(__int128 x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
print(x/10);
putchar(x%10+'0');
}
关于使用环境参考链接