説明#
__int128
は 64 ビットの GCC、G++ でのみサポートされており、C++ の標準ではありません。64 ビットの GCC の場合は直接使用できます。
NOI シリーズイベントでのプログラミング言語の使用制限に関する補足説明では次のように述べられています:
アンダースコアで始まるライブラリ関数やマクロの使用は許可されますが、明示的に禁止されているライブラリ関数やマクロは除外されます。
したがって、__int128
は競技中に使用することができます。
ストレージ範囲#
__int128
は 128 バイトのスペースを占有し、データ範囲は
です。
正確な範囲は で、桁数は約です。
使用方法#
宣言と定義#
他の型と同様に 型名 変数名
とします。
__int128 a=4,b=3;
a=10;
a+=b;
a*=b;
...
入力と出力#
C++ の標準ではないため、対応する入出力ツールがなく、scanf
、printf
、cin
、cout
を直接使用することはできません。入力と出力は自分で手動で行う必要があります。
入力#
void read(__int128 &ans){
__int128 x,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
ans=x*f;
}
出力#
void output(__int128 x){
if(x<0){
putchar('-');
x*=-1;
}
int ans[35]={0},top=0;
do{
ans[top++]=x%10;
x/=10;
}while(x);
while(top){
putchar(ans[--top]+'0');
}
}