Ca doit être très simple, mais je n'arrive pas à trouver une meilleure solution que celle dont je développerais l'idée ci dessous.
Énoncé du problème :
- On part du principe que tous les entiers seront forcément positifs (ce n'est pas vrai mais ca simplifiera l'ex, et les négatifs ne sont pas un souci).
- La plage possible d'un entier se situe entre 0 et ( (2^31) - 1 ) == 2147483647 .
- Pour différentes raisons propres au langage que j'utilise, et que vous n'avez pas besoin de connaitre, je préférerais éviter la solution de la conversion de l'entier en chaine de caractère.
- Les entiers sont exprimés en base 10, décimale.
- Je dois récupérer successivement les entiers qui composent le nombre, du poids le plus faible au plus élevé, ou inversement bien que je préférerais le premier ordre de défilement.
Ex :5483152 , donnera 2,5,1,3,8,4,5
Connaissant la plage possible d'un entier je peux diviser l'entier par une puissance de 10 décroissante, en partant de 10^9 jusqu'à ce que le quotient soit supérieur à 0, je peux ensuite déterminer facilement le chiffre du poids le plus élevé, jusqu'au poids le plus faible.
Problème :
Si mon nombre n'est pas supérieur à 99 999 999, on effectue une/des division(s) et itération(s) de boucle inutile(s).
En rédigeant ce message je me suis rendu compte que je peux utiliser un switch.
Dans l'éventualité où vous auriez une meilleure solution à me proposer je reste ouvert à toute proposition, et le cas échéant je ne supprimerais pas ce message que j'ai mis tant de cœur à rédiger
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if I < 10 then ... elseif I < 100 then ... ... endif
PS : Oui dans mon exemple je récupères les entiers du poids le plus fort au poids le plus faible, mais c'est juste parce que je ne voie pas d'autre solution directe![]()
Partager