※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。
詳しくはコチラ
なるべくわかりやすい解説を付けました。
FINAL問題【特定の文字で区切り 1 行で出力】大きな数値を 3 けたごとにカンマ区切りで出力 2 (paizaランク C 相当)
大きな数値Nが入力されます。 位の小さい方から 3 けたごとにカンマ区切りで出力してください。
ただし、Nのけた数は 3 の倍数とは限りません。
- 入力される値
-
N
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
- 期待する出力
- 答えの数値を出力してください。
M
末尾に改行を入れ、余計な文字、空行を含んではいけません。
- 条件
- すべてのテストケースにおいて、以下の条件をみたします。
* Nは自然数
* Nは 0 以上 10 ^ 1,000 以下
- 入力例1
-
123456789
- 出力例1
-
123,456,789
- 入力例2
-
813
- 出力例2
-
813
- 入力例3
-
12345678901234567890
- 出力例3
-
12,345,678,901,234,567,890
解答 (入力例3で解説)
#↓入力値を文字列として受け取りバラバラにして反転する(gets.chars.reverse) #["0", "9", "8", "7", "6", "5", "4", "3", "2", "1", "0", "9", "8", "7", "6", "5", "4", "3", "2", "1"] numbers = gets.chars.reverse #配列の長さの回数分繰り返す(20回) numbers.size.times do |i| #3の倍数かつループの最後以外の時 if (i + 1) % 3 == 0 && i + 1 != numbers.size #,(カンマ)を挿入する numbers[i] << ',' end end #繋げて反転して出力する puts numbers.join.reverse