Angstrom数示例: 153;1**3 + 5**3 + 3**3 = 153
puts "Enter a number: "
number = gets.chomp.to_i
initial_number = number
angstrom = 0
while (number % 10) != 0
number = number % 10
angstrom = angstrom + (number ** 3)
number = number / 10
end
puts angstrom
puts initial_number
if angstrom == initial_number
puts "YES ANGSTROM"
else
puts "NO ANGSTROM"
end例:输入是123
输入we,则在number % 10语句之后得到12。但是,在那之后,它不会再次进入;为什么呢?12 % 10不应该出现在0上。
我添加了puts angstrom和puts initial_number行,只是为了检查数字是怎么回事。
发布于 2016-10-17 22:45:49
我怀疑你想要更多的东西,比如:
angstrom = 0
while number > 0
digit = number % 10
angstrom += digit ** 3
number /= 10
end在不破坏数字的情况下隔离每个数字,并避免从内部包含在输入数字中的零提前终止。
增编
这是通过使用divmod进一步改进的(凯里斯沃夫兰提供的)
angstrom = 0
while number > 0
number, digit = number.divmod(10)
angstrom += digit ** 3
end发布于 2016-10-17 22:59:44
这是另一种方法。
def angstromize(number)
number.to_s.each_char.reduce(0) { |t,d| t+(d.to_i)**3 }
end
angstromize(153)
#=> 153发布于 2016-10-17 22:27:11
我在前面的评论中曾暗示过这一点,但您正在残害您的while条件。你想从数字中得到一个数字,但是在这个过程中,这一行会把它踩出来:
number = number % 10这保证了number总是小于10,并且总是迫使你的循环提前退出。你也会计算出完全错误的东西。
最简单的解决方案是创建一个新变量,表示您提取的数字。
digit = number % 10
angstrom = angstrom + (digit ** 3)通过进行这些更改,您可以成功地通过153的测试用例。
https://stackoverflow.com/questions/40096575
复制相似问题