long long型

概要

int 型より大きな数を扱える整数型。

long long 型は $64$ ビットの整数型(AtCoder環境の場合)。
符号用の $1$ ビットと、値の大きさ用の $63$ ビットを使う。
そのため、扱える値の範囲は $-9{,}223{,}372{,}036{,}854{,}775{,}808$ から $9{,}223{,}372{,}036{,}854{,}775{,}807$ まで。
およそ $\pm 9 \times 10^{18}$ くらいまでは大丈夫で、それを超えると危ないと認識するとよい。

整数リテラルの後ろに LL を付けると、long long 型になる。

1LL

宣言と初期化

宣言だけする場合

long long a;

初期化もする場合

long long a = 0LL;  // 固定値で初期化。0 とだけ書いても変換されるので問題ない
long long b = a;    // 他の整数型や double 型の変数で初期化

可能な演算

long long 型では、int 型とほぼ同じ演算ができる。

詳しくは「int型」の記事参照。

よく使う処理

long long 型でも、int 型とほぼ同じ処理ができる。

詳しくは「int型」の記事参照。

文字列化

long long 型の数 astring 型に変換したい場合、以下のようにする。

to_string(a)

逆に、string 型の文字列 slong long 型にしたい場合、以下のようにする。

stoll(s)

ただし、変換後の値が long long 型に収まるかどうかを確認すること。

int 型の積が一時的に範囲を超える場合

例えば、$10^6$ 程度の int 型の数 ab を掛け、$10^7$ 程度の数 c で割った余りを求める場合を考える。

(a*b)%c

このように書くと、掛け算の時点では int 型として計算される。
a*bint 型の範囲を超えるため、最後の結果も正しくならない。

(1LL*a*b)%c

このように 1LL を掛けると、long long 型として計算されるため、途中のオーバーフローを防げる。

注意点

int 型と同様に、桁あふれや負数の除算などに注意する。

詳しくは「int型」の記事参照。

long long 型でも桁あふれしそうな場合は、別の計算方法を考えた方がよいことが多い。
さらに大きな桁数を扱う型を持ち出すのは大変だし、たいていの場合その方法は想定解ではない。

関連アルゴリズム

int型

long long 型より小さい整数を扱う、最も代表的な整数型。
可能な演算やよく使う処理は、long long 型とほぼ同じ。

string型

文字列を扱う型。
to_stringlong long 型から変換でき、stolllong long 型へ変換できる。