关于 __int128

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');
}

关于使用环境参考链接

你可能感兴趣的:(Algorithm)