1

整数の fixnum を取り、すべての偶数 (インデックス付き) 整数を 2 で乗算したい。これを行う最善の方法は、最初に fixnum を配列に変換することだと思いました。では、次の 16 桁の数を考えてみましょう: a = 4408041234567901

私はできることを知っています:

a.to_s.split('')

「文字列化された」数値の配列に「a」を返します。しかし、私はフォローアップできません:

a.map!.with_index {|i,n| i.even? n*2}

これを行うためのメソッドを作成する方法にちょっとこだわっていると思います。したがって、私の質問は、その数値グループを文字列ではなく fixnum/integer の配列に変換する方法でさえあるかもしれません。

4

3 に答える 3

1

それを配列に変更するには、次のようにします

a = 4408041234567901
arr = a.to_s.chars.map(&:to_i)
# => [4, 4, 0, 8, 0, 4, 1, 2, 3, 4, 5, 6, 7, 9, 0, 1]

代替数を 2 で乗算することもできます

arr = a.to_s.chars.map.with_index {|n,i| i.even? ? n.to_i * 2 : n.to_i }
# => [8, 4, 0, 8, 0, 4, 2, 2, 6, 4, 10, 6, 14, 9, 0, 1]

少し改善すると、 a を使用しHashて乗算する数を見つけることができます。

h = {true => 2, false => 1}
a.to_s.each_char.map.with_index {|n,i| n.to_i * h[i.even?]}

編集

各ステップを説明することはできますが、自分で理解しようとする方がよいでしょう。irb を開き、入力a.to_sして出力を確認します。次にa.to_s.chars、出力などを入力して検査します。

于 2015-04-26T05:52:13.150 に答える