1
num = "0000001000000000011000000000000010010011000011110000000000000000"
for n in 0...num.length 
   temp = num[n] 
   dec =  dec + temp*(2**(num.length - n - 1))
end
puts dec

このコードをirbで実行すると、次のエラーメッセージが出力されます。Pythonで同じロジックをコンパイルすると、まったく問題なく動作します。「RangeError:bignumが大きすぎて「long」に変換できませんでした:しかし、関連する答えが見つかりませんでした。助けてください:(事前に感謝します。

RangeError: bignum が大きすぎて*'に変換できませんlong'
        from (irb):4:in
        from (irb):4:in each'block in irb_binding'
        from (irb):2:in
        から (irb):2
        C:/Ruby193/bin/irb:12:in `' から

4

2 に答える 2

5

得られるnum[n]のは、数字ではなく、1 文字の文字列です。私はあなたのコードをより慣用的なRubyに書き直しました。これはどのように見えるかです:

dec = num.each_char.with_index.inject(0) do |d, (temp, n)| 
  d + temp.to_i * (2 ** (num.length - n - 1))
end

ただし、最も慣用的なのはnum.to_i(2)、おそらく .

于 2012-04-05T07:46:32.447 に答える
3

これを試して

num = "0000001000000000011000000000000010010011000011110000000000000000"
dec = 0
for n in 0...num.length 
   temp = num[n] 
   dec =  dec + temp.to_i * (2**(num.length - n - 1))
end
puts dec
于 2012-04-05T07:29:31.440 に答える