我需要找到所有数字的总和,它们等于数字的阶乘之和。我有一个算法:
def equal_to_sum_of_factorial_digits?(n)
n == n.to_s.scan(/\d/).map{|s| s.to_i}.reduce{|acc,j| (j == 0 || j == 1) ? 1 : acc + (1..j).inject(:*)}
end
start = Time.now
answer = (10..145).reduce {|acc,j| acc + j if equal_to_sum_of_factorial_digits?(j)}
puts "The answer is #{answer} and it took #{(Time.now-start)*1000} milliseconds."
此处equal_to_sum_of_factorial_digits?
将数字分成不同的数字,然后在1
或1
(1或0阶乘为1)或阶乘的情况下添加值0
如果2
最高为9
,则为值。然后,答案对具有该属性的范围内的所有值进行求和。
代码一直有效,直到我高于145(145是第一个具有等于其阶乘数之和的属性的值:145 = 1!+ 4!+ 5!)它给出了错误{ {1}}。
我不知道为什么undefined method '+' for nil:NilClass
方法返回answer =
后equal_to_sum_of_factorial_digits?
之后的代码失败了。有人可以开导我吗?
答案 0 :(得分:1)
这是因为在reduce
的前一次迭代中,acc
由于被评估为nil
而导致nil
acc
。请注意,{{1}}的值是每次迭代的块的计算值。