競技プログラミング用 知識集積所

long long型

最終更新:

sport_programming

- view
管理者のみ編集可


雑な説明

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

レベル

ABCのB問題レベル。

詳細な説明

64ビットの整数型。
符号用の1ビット、値の大きさ用の63ビット。
そのため、扱える値の範囲は-9,223,372,036,854,775,808から9,223,372,036,854,775,807まで。
およそ±9×10^18くらいまでは大丈夫、それを超えると危ない、と認識するとよい。

1LLのように、普通の数の後ろにLLをつけるとlong long型になる。

int型(およそ±20億まで)では桁が足りなさそうな場合に用いる。
しかし、long long型も無限に大きい数を扱えるわけではないので、油断は禁物。

宣言と初期化

宣言だけする場合
long long a;
初期化もする場合
long long a = 0LL;  //固定値で初期化、0とだけ書いてもキャストされるので問題ない
long long b = a;    //他の変数(整数型、double型)で初期化

可能な演算

int型とほぼ同じなので、そちらを参照。
補足として、long long型とdouble型の計算では答えはdouble型になる。

よく使う処理

int型とほぼ同じなので、そちらを参照。
異なる点として、string型をlong long型にするにはstoll()を使う。

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

例えば、10^6くらいの数2つをかけて10^7くらいの数で割った余りを知りたい、という場合。
(a*b)%c
と書くと、掛け算の時点でint型範囲を超えてしまうため、最後の結果も狂ってしまう。
(1LL*a*b)%c
というように1LLを掛け算することで一時的にlong long型で処理するとオーバーフローを防げる。

注意点

int型とほぼ同じなので、そちらを参照。
補足事項として、long long型でも桁あふれしそうな場合、さらに大きな桁数を扱う型を持ち出すよりは、別手段を考えた方がよい。

関連アルゴリズム

int型とほぼ同じなので、そちらを参照。
ウィキ募集バナー