2016-10-19 1 views
1
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 

Cette fois, j'ai essayé de faire un programme pour montrer les nombres armstrong dans une gamme qui est prise de l'entrée de l'utilisateur. Le programme s'arrête juste après que j'ai entré le numéro et appuyez sur Entrée et je ne peux pas comprendre pourquoi. Gardez à l'esprit que je ne peux pas utiliser pour (chaque), c'est pourquoi j'utilise si souvent.Ruby nombres armstrong dans une gamme

+0

En fait, le programme ne se arrête. Vous ne verrez rien imprimer si la condition 'sum_angstrom == number' est remplie. Vous pouvez utiliser des 'puts' pour déboguer votre programme. – lcguida

+0

Hmm, il devrait normalement imprimer, 1 153 370 371 407, je vais continuer à essayer. –

+0

Je pense que cela a quelque chose à voir avec la façon dont j'imite (nombre + = nombre) à travers les nombres. –

Répondre

0

Tout d'abord, remplacez number += number par number += 1; sinon, vous ne testerez que les puissances de 2.

Ensuite, déplacez la ligne number += 1 en bas du bloc while dans lequel il se trouve. Sinon, vous testerez toujours si sum_armstrong(n) == n+1.

Ce 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 
+0

C'est exactement ce que j'ai fait avant de voir votre réponse, je savais qu'il y avait quelque chose de mal dans la façon dont je réitère XD. –