![]() |
Bienvenue invité ( Connexion | Inscription )
![]() |
![]()
Message
#1
|
|
Nouveau Membre Groupe : Membres Messages : 4 Inscrit : 27 Mar 2023 Membre no 217 569 ![]() |
J'ai besoin d'imprimer tous les nombres armstrong entre 1 et 10000. Mon problème est que lorsque j'exécute mon programme et que j'atteins 150, il ne fait rien.
Code (1^3) + ((5^3)-1) + (0^3) au lieu de Code (1^3) + (5^3) + (0^3). Est-ce un bug du compilateur ? Est-il nécessaire de réinstaller mon compilateur ? J'utilise actuellement des blocs de code. Code #include <iostream> #include <math.h> using namespace std; int main() { for(int i = 0;i <= 10000;++i) { int r = i; int dig = 0; while(r != 0) { dig++; r /= 10; } int n = i, sum = 0; while(n != 0) { int d = n % 10; sum += pow(d, dig); n /= 10; } if(sum == i) cout << i << ' '; } cout << "\n\n\n"; return 0; } En conséquence, il n'imprime pas 153 (un nombre d'Armstrong), car la somme est de 152. Je ne sais pas si d'autres nombres effectuent la même chose. Mais j'ai vérifié jusqu'à 200 en utilisant cette source et il n'y a aucun problème avec les autres chiffres sauf ceux de la zone 150-160. Ce message a été modifié par Phil J. Fry - 31 Mar 2023, 12:31.
Raison de l'édition : Titre
|
|
|
![]() |
![]()
Message
#2
|
|
Macbidouilleur d'Or ! ![]() ![]() ![]() ![]() ![]() Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 ![]() |
Je sais que ça n'aide pas vraiment... je déterre un sujet et je change le langage...
En APL, on peut décoder un nombre en un vecteur de ses chiffres. Code 10 10 10 10 10⊤153 0 0 1 5 3 On peut prendre la puissance 3 d'un vecteur, ce qui produit le vecteur de la puissance 3 de chaque élément. Code (10 10 10 10 10⊤153)*3 0 0 1 125 27 On peut sommer les éléments d'un vecteur par une réduction par l'addition : Code +/(10 10 10 10 10⊤153)*3 153 On peut comparer ce résultat au nombre lui-même Code 153 = +/(10 10 10 10 10⊤153)*3 1 On peut transformer cette expression en fonction lambda (sans nom) en plaçant des accolades autour et en remplaçant l'argument par omega Code {⍵ = +/(10 10 10 10 10⊤⍵)*3} {⍵=+/(10 10 10 10 10⊤⍵)*3} On peut la nommer: armstrong(int) -> bool Code armstrong ← {⍵ = +/(10 10 10 10 10⊤⍵)*3} On peut distribuer la fonction avec un opérateur "chaque" (symbolisé par des trémas), à chacun des arguments de droite Code armstrong ¨ 1 2 3 1 0 0 On peut utiliser ce masque booléen pour filtrer un vecteur de même taille. Donc seul 1 est un nombre d'Armstrong dans le vecteur de 1 à 3 Code (armstrong ¨ 1 2 3)/1 2 3 1 On peut générer un vecteur d'indices avec l'opérateur iota: Code (armstrong ¨ ⍳3)/ ⍳3 1 On transforme l'expression en fonction: Code {(armstrong ¨ ⍳⍵)/ ⍳⍵} {(armstrong¨⍳⍵)/⍳⍵} Et finalement, l'appliquer jusqu'à la limite demandée: Code {(armstrong ¨ ⍳⍵)/ ⍳⍵} 10000 1 153 370 371 407 Note : Les nombres à 4 chiffres trouvés par le javascript ne sont pas des nombres d'Armstrong J-P Ce message a été modifié par Jaypee - 7 Jul 2023, 05:38. |
|
|
![]() ![]() |
Nous sommes le : 1st August 2025 - 16:56 |