前提・実現したいこと
以前プログラミングテストで、
「1234567890の約数の内30000000以下を足せ」
という問題がありました。
約数を出すことコードは参考を用意して書けたのですが、
3000000以下を足すコードをどうやって構築すればいいのかが分かりません。
該当のソースコード
ruby
1def divisor(num) 2 result = [] 3 i = 1 4 while i <= num do 5 remainder = num % i 6 if remainder == 0 7 result << i 8 end 9 i += 1 10 end 11 return result 12end 13 14puts "約数を算出したい整数を入力してください" 15num = gets.to_i 16r = divisor(num) 17 18puts r
試したこと
ruby
1puts (r <= 30000000).sum
とやってみましたが。
undefined method `<=' for #Array:0x000000000231b468 (NoMethodError)
となってしまいます。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.3
コードはコピペで動いたが、意味を全く理解していないということでしょうか?
コメントありがとうございます。
1から指定した数字まで割って余りが0になったものを繰り返し表示するように組まれているという風に理解してます。
いや、プログラム全体の意味じゃなくて、各行の意味です。
divisor(num)の1行目のresult[]で配列を作り、2行目でiを1と指定、
3行目で指定した数字まで繰り返しの設定、4行目で割った余りがremaiderに代入、
5~7行目でremainderが0だったら配列に追加、8行目でiを+1する、
10行目でreturnを使用して戻り値の指定。
動作はまず、約数を算出したい整数を入力してくださいと表示され、入力した数字を整数列に変換してnumに入れ、divisor(num)を変数rに入れて、put r で配列を表示。
と考えてます。
それがわかって、何故
> 3000000以下を足す
が分からないのかが、分かりません。
if文も足し込むのも分かっているのに。
3行目を while i <= 30000000 do にして
最後の行に puts "約数の合計は#{r.sum}です"
を追加したら解決出来ました。
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー