一种创建庞大数字的方法

时间:2016-01-24 15:56:11

标签: ruby literals

RubyMonk指出如何使用下划线来方便地编写大数字,这些数字在没有划分的情况下会变得难以阅读。

他们的任务是:尝试使用下划线来制作一个巨大的,可读的数字。他们提供此代码:

def describe(something)
  puts "I am a: #{something.class} and I look like: #{something}"
end

def big_num
  # create a huge number
end

describe(big_num)

任何人都可以解释我将如何创建一个庞大的数字?根据下面的错误消息,我必须在代码中使用下划线才能通过。

3 个答案:

答案 0 :(得分:2)

RubyMonk需要一个类Bignum的对象,它是标准Ruby库的一部分。来自文档:

  

Bignum对象保持Fixnum范围之外的整数。 BIGNUM   整数计算时会自动创建对象   否则会溢出Fixnum。

所以你只需要创建一个比Fixnum可以处理的数字更大的数字。例如,这将通过RubyMonk的规范:

def big_num
  5_000_000_000_000_000_000_000
end

因为数量大于Fixnum可以处理的数量,Ruby会自动返回Bignum。例如,尝试运行:

5_000_000_000.class
# => Fixnum
5_000_000_000_000_000_000_000.class
# => Bignum 

答案 1 :(得分:2)

Ruby允许使用下划线作为占位符(即它们只是为了提高人类的可读性,否则会被忽略)。因此,您的big_num方法只能有一行:

return 1_000_000_000_000_000_000_000_000_000_000_000

并且调用它将返回1000000000000000000000000000000000

return关键字是可选的)

答案 2 :(得分:1)

Ruby允许您在编写文字数字时添加下划线,以便更容易阅读大数字。

约定规定,如果数字长度为4位或更少,则不应使用下划线,如果长度较长,则不应使用每三位数字,从右侧开始:

10_000_000 # => 10000000

也适用于浮动数字:

10_000.0 # => 10000.0

如果您将下划线放在两位数之间,则下划线会被忽略:

1_2_3_4_5 # => 12345

查看错误消息后,很明显RubyMonk期待Bignum。这是另一个魔术,解释器透明地执行 - 如果数量足够小以映射到体系结构的int,则该数字是Fixnum的实例:

100.class # => Fixnum

如果不是这样,Ruby会自动使用专用类(Bignum):

(10_000_000**100).class # => Bignum
  # 10_000_000 to the power of 100, 
  # which is a very big number and
  # thus stored in Bignum