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

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

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

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

Clang

Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラである。

Q&A

解決済

2回答

1604閲覧

for文やwhile文などの実行時間の違い

jajaja

総合スコア17

C++

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

Clang

Clangは、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラである。

0グッド

0クリップ

投稿2020/05/03 07:39

前提

AtCoder Beginner Contest 165のB問題についてです。

https://atcoder.jp/contests/abc165/tasks/abc165_b

発生している問題

1.cppのコードを実行させると実行時間制限超過の結果が返ってきます。
2.cppのコードを実行させると正解の結果が返ってきます。

###質問
これは、一般的にfor文の方がwhile文より実行時間が早いという認識で問題ないでしょうか。
###1.cpp

#include <iostream> using namespace std; int main() { long long x; cin >> x; int count = 0; int money = 100; while(x > money){ money += money/100; count ++ ; } cout << count << endl; return 0; }

2.cpp

#include <iostream> using namespace std; int main(void){ long long x, a = 100; cin >> x; for(int i=1;;i++){ a += a/100; if(a >= x){ cout << i << endl; return 0; } } }

補足情報(FW/ツールのバージョンなど)

Clang10.0.0

###参考
https://atcoder.jp/contests/abc165/submissions/12582464
の方のコードを正答例として引用させていただきました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

money が int なので無限ループしているのではないですか?

速度面で言えば、差のつく要素はありません。x は long long なので、この値が int の最大値を越えていた場合、money は決してその値に達することができず、ループは終了しません。

投稿2020/05/03 07:45

編集2020/05/03 08:23
Zuishin

総合スコア28669

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

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

jajaja

2020/05/03 08:27

回答ありがとうごございます。 forとwhileで違いはないのですね。 また、moneyをlong long型に変更したところ正解の結果が得られました。
Zuishin

2020/05/03 08:36 編集

そうですね。同じことをする場合、for と while は同じ結果にコンパイルされると期待していいはずです。 少なくとも私はチューニング目的で使い分けるテクニックは聞いたことありませんし、そこで差が付くようなら、もう片方にもそれを応用してコンパイルできるはずなので、よほどシビアで低レベルなことをする時以外、コンパイラに任せていいと思います。
jajaja

2020/05/03 17:06

わかりました! ありがとうございました!
guest

0

一般的にwhileとforを比較することはできません。コンパイラ次第です。生成された機械語を比較するしか方法はありません。

ちなみに、この例の場合は1.cppについてはlong long型とint型整数を比較しておりますのでxの値次第では無限ループになります。

投稿2020/05/03 08:01

HogeAnimalLover

総合スコア4830

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

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

jajaja

2020/05/03 08:28

回答ありがとうごございます。 forとwhileの違いは機械語を確認するしかないのですね。 ありがとうございます。 また、moneyをlong long型に変更したところ正解の結果が得られました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問