2015-12-21 43 views
0

我写一个红宝石方法如下:的方法来计算的位数在Bignum的

def build_array(word) 
    word_copy = word 
    array = [] 
    length = word_copy.length 
    for i in 1..length do 
    array[i] = word_copy % 10 
    word_copy = word_copy/10; 
    end 
puts array 
end 

我想创建,从1数到的数字在Bignum数量的迭代器。

Bignum.length是无效的红宝石。或者,是否有办法将Bignum转换为其组成数字的数组(这是我试图实现的)。

谢谢!

+2

您是否在寻找'num.to_s'? –

回答

2

你可以将其转换为字符串并计算其大小

b = 2_999_999_000_000_000 
p b.class 
#=> Bignum 
p b.to_s.size 
#=> 16 
p b.to_s.split("").map(&:to_i) 
#=> [2, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
+0

'b.to_s.chars.map(&:to_i)'节省了几笔笔划,并减少了线路噪音。 –

3
x = 424723894070784320891478329472334238899 
Math.log10(x).floor + 1 # => 39 

Math.log10(x + 1).ceil # => 39 
+1

它也更快!尽管不太明显,但如果可以的话。 –

+0

@SergioTulentsev我认为这是最直接的。我想不出比这更明显的答案。 – sawa

+0

也许这只是我在数学上不好。 –