基本情報アルゴリズムについて質問です。教科書P231なぜ、a num←num÷10 b i mod 3 が正解ですか?

1件の回答

回答を書く

1022448

2026-07-13 16:20

+ フォロー

8~11行目は、numがマイナスの際は「マイナス」ということを覚えておいて、以下の処理ではいったんプラスの数値として処理することを意味しています。



さて、13行目~22行目です。

2行目よりiとjは最初はゼロです。

14行目では、result[0]にtable[num mod 10]を代入しています。

table[num mod 10]は簡単にいうと、末尾の数字を文字列にしたものです。

仮にnumが12345だとすると、12345 mod 10=5となり、4~5行目のとおりtable[5]は\u0026quot;5\u0026quot;です。



こんな風に後ろから文字列化していくことが見えてきます。

最後の数字5は文字化したので必要なくなりました。

なので16行目でnum←num÷10をします。

この時、1行目でnumは整数型と型が決まっていますので、小数以下は切り捨てられます。したがってnumは1234となります。



17行目まで終了するとiとjは1になっています。

19行目を見ると、result[j]に\u0026quot;,\u0026quot;を格納していることがわかります。3桁ごとの区切りですね。

jは文字列となるresultの添え字(インデックス)ですから、iは元の数字の桁数のうち、どこまで進んだかを記憶していくものと考えられます。

(「考えられる」というのは後述しますが推測です。試験の際にプログラムを全部読んで変数の推移をトレースするのは実践的ではありません。後で時間が余れば一部の問題はやりますが、基本的にはしません)



3桁ごとに区切るのですから、元の数値の桁数ベースであるiを使うことになります。

i mod 3=0ということは、3桁目、6桁目、9桁目ということになり、その場合に\u0026quot;,\u0026quot;をresult[j]に入れることは設問に適しています。



というわけで、空欄aはnum←num÷10、空欄bはi mod 3ということになります。



なお、余談ですが、27行目終了時点でresultには逆順で格納されているハズです。

それを29行目以降のfor文で直すのでしょう。



正しいか確かめてはいません。「選択肢の中から選ぶ」とか「正解の理由はこれ」という例です。

間違いが許されない仕事ならキチンと確認しますが、合格を目指すのが目的の試験なら時間がもったいないですし推測で十分です。もちろんそれなりの根拠を持つための知識は必要ですので頑張ってください。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有