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
        来自 (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]是一个字符串,而不是一个数字。我将您的代码重写为更惯用的 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 回答