红宝石阿姆斯特朗在一个范围内的数字

时间:2016-10-19 12:24:51

标签: ruby numbers range

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键,程序就停止了,我无法弄清楚原因。

请记住,我无法使用(每个),这就是我经常使用的原因。

2 个答案:

答案 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)}