puts "Enter range(starts at 1), ends at the number that you enter: "
range = gets.chomp.to_i
number = 1
while number <= range
temporary_number = number
sum_angstrom = 0
number += number
while(temporary_number != 0)
digit = temporary_number % 10
temporary_number /= 10
sum_angstrom = sum_angstrom + (digit ** 3)
end
if (sum_angstrom == number)
puts number
end
end
这一次,我试图制作一个程序,以便在用户输入的范围内显示数据。输入数字后按下Enter键,程序就停止了,我无法弄清楚原因。
请记住,我无法使用(每个),这就是我经常使用的原因。
答案 0 :(得分:0)
首先,将number += number
更改为number += 1
;否则你只会测试2的权力。
其次,将number += 1
行移动到它所在的while块的底部。否则,您将始终测试sum_armstrong(n) == n+1
。
这works:
puts "Enter range(starts at 1), ends at the number that you enter: "
range = gets.chomp.to_i
number = 1
while number <= range
temporary_number = number
sum_angstrom = 0
while(temporary_number != 0)
digit = temporary_number % 10
temporary_number /= 10
sum_angstrom = sum_angstrom + (digit ** 3)
end
if (sum_angstrom == number)
puts number
end
number += 1
end
答案 1 :(得分:0)
红宝石一号衬里中的阿姆斯壮编号
n = 153
s = 0
n.to_s.split("").map{|e| s+=(e.to_i*e.to_i*e.to_i)}
puts (n==s ? "Armstrong number" : "Not Armstrong number")
您可以根据需要在一定范围内进行迭代以打印值。 主要逻辑在下面的行中。
n.to_s.split("").map{|e| s+=(e.to_i*e.to_i*e.to_i)}
稍微提高我的答案
n.digits.map{|e| s+=(e**3)}