值是一个整数,这应该取值中的每个数字,将其提高到值的位数的幂,然后将它们相加。
出于某种原因,它适用于除370和371之外的所有东西,在370我得到346和371收益347,这是什么?!
value.to_s.chars.map {|e| e.to_i }
.inject{|sum, e| sum += e ** value.to_s.length }
答案 0 :(得分:2)
您缺少inject
的初始值。这将有效:
value.to_s.chars.map {|e| e.to_i }
.inject(0){|sum, e| sum += e ** value.to_s.length }
来自docs:
如果没有明确指定备忘录的初始值,那么集合的第一个元素将用作备忘录的初始值。
答案 1 :(得分:-1)
您的问题已得到解答,但这是执行计算的另一种方法。
<强>代码强>
def sum_powers(value)
n = value.to_s.size
n.times.reduce(0) do |t,_|
value, d = value.divmod(10)
t + d**n
end
end
示例强>
sum_powers(286)
#=> 736
<强>解释强>
value = 286
n = value.to_s.size
#=> 3
t = 0
value, d = value.divmod(10)
#=> [28, 6]
t + d**n # replaces t
# 0 + 6**3
#=> 216
value, d = value.divmod(10)
#=> [2, 8]
t + d**n # replaces t
# 216 + 8**3
#=> 728
value, d = value.divmod(10)
#=> [0, 2]
t + d**n # replaces t
# 728 + 2**3
#=> 736