Allen M Allen M - 1 month ago 12
Ruby Question

Ruby armstrong numbers in a 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


This time, I tried to make a program to show the armstrong numbers in a range that's taken from the user's input. The program just stops after I enter the number and press enter and i can't figure out why.

Keep in mind that i can't use for(each), that's why i'm using while so often.

Answer

First of all, change number += number to number += 1; otherwise you will only test the powers of 2.

Second, move the number += 1 line at the bottom of the while block it is in. Otherwise you will always test if sum_armstrong(n) == n+1.

This 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
Comments