質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

意見交換

クローズ

5回答

788閲覧

C++におけるlong long int型の使用

ShuyaOda

総合スコア8

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2024/12/05 08:56

編集2024/12/05 09:22

0

0

競技プログラミングをしています。C++を使っているのですが整数値を扱う時に統一して long long int 型を用いるのはやめたほうが良いですか?使い分けが少しめんどくさいのですが...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答5

#1

fana

総合スコア12010

投稿2024/12/05 09:12

編集2024/12/05 09:33

意味がよくわからないので,話の前提か何かを明確に述べた方が良いのではないかと思います.

  • int とかだと収まらなくて long long int だと収まるような値というのを頻繁に扱うような作業」みたいな場面に関しての話……ということなのでしょうか?
  • CPUのアーキテクチャ(?)か何かの都合で,どのサイズの演算が早いとか遅いとかいう話もありそうですが(私はその辺わからないけど),そういう面での話をしているのでしょうか?

競技プログラミングをしています。

という編集を受けて:

そういう世界の話であれば, あなたが最も{楽,手っ取り早い,etc}と思うやり方を選べばよい のかな,と思います.
(何かメモリ使用量の制限みたいなが設けられていてそれに引っかかったりとかしない限りは.)

私はそれ系に手を出したことはないので実情はよく知らないのですが,
「競技プログラミング long long」とかググってみると #define int long long なんていう話すらもある様子(?).こわい.

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

TakaiY

総合スコア13907

投稿2024/12/05 09:14

メモリの使用量が増えることに考慮が必要ないシステムなのであればそれでいいんじゃないでしょうか。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

toge_

総合スコア280

投稿2024/12/05 09:32

競技プログラミングに特化するのであれば、全部long long intでよいと思います。

cpp

1using ll=long long int;

なんてスニペットを用意されている人もいますよね。
お仕事やゲーム開発とかになると話は別ですが、まあそうなった時に考えればよいかと。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

luuguas

総合スコア501

投稿2024/12/05 11:42

一個人の意見ですが、競技プログラミングにおいては整数型を long long (int) に統一して問題ないと思います。

私も競技プログラミングをやっていますが、私が整数型がらみで起こしたミスは主に

  • long longにすべきところをintにしたせいでオーバーフローが発生する
  • 非常に長い配列(または大きなデータ構造)の要素の型をlong long型にしたせいでメモリ制限超過(MLE)が発生する

の2つです。

そして、私の体感ではこれらのミスが起きる頻度は前者のほうがとても高く、一方後者はめったに起きません。
そのため、整数型は基本的にlong longで統一してしまい、MLEが起きたときは個別に対応すればよいと思います。


他の方も言及しているスニペットの話については、#define int long longのように既存の型を書き換えてしまうものは流石にマズいですが、using ll = long long;のように他の命名と被らない別名を用意してあげるのは問題ないと思います。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

SaitoAtsushi

総合スコア5694

投稿2024/12/05 14:05

プログラム一般の常識で言えば各々の場面で使い分けるに越したことは無いです。 どういう値を取り扱うつもりなのかという意図が型に現れるのでプログラムを読むときのとっかかりになるからです。

自分が書いたプログラムでも少し時間がたつとどういう意図でやっているのか驚くほど忘れるものです。 プログラミングをやっていると自分が馬鹿だと思い知ることが何度もあるはずです。 ましてや他人が読むこともある場合だとかなり親切に書かないととても読めないものが生まれてしまいます。

逆に言えば読み返すことがない (長期的な保守をしない) ことが分かっている競技プログラミングでは問答無用で整数は long long int を使うということにしてもそれほど問題になりませんし、実際にやってる人は結構います。

しかし、競技にどういう姿勢で望むかにもよるでしょう。 もしプログラミングの練習として競技プログラミングをやるなら競技のために一般的な作法を捨てるのは本末転倒と言えます。

エンタメとして競技に取り組む場合ならあえて行儀の悪い方法を取り入れてでもスコアを突き詰めるというのも悪いわけではありませんし、ご自身がどういう考え方で競技をやるかによるんじゃないでしょうか。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問