Existe-t-il un algorithme pour déterminer les éléments suivants?Algorithme de détection des décimales répétitives?
- Si le résultat d'une division est un nombre décimal répétitif (en binaire).
- Si elle se répète, à quel chiffre (représenté par une puissance de 2) la répétition commence-t-elle?
- Quels sont les chiffres qui se répètent?
Quelques exemples:
1/2 = 1/10 = 0.1 // 1 = false, 2 = N/A, 3 = N/A, 4 = N/A
1/3 = 1/11 = 0.010101... // 1 = true, 2 = -2, 3 = 10
2/3 = 10/11 = 0.101010... // 1 = true, 2 = -1, 3 = 10
4/3 = 100/11 = 1.010101... // 1 = true, 2 = 0, 3 = 10
1/5 = 1/101 = 0.001100110011... // 1 = true, 2 = -3, 3 = 1100
Est-il possible de le faire? L'efficacité est une grande préoccupation. Une description de l'algorithme serait préférable au code, mais je prendrai la réponse que je peux obtenir.
Il est également intéressant de noter que la base n'est pas une grosse affaire; Je peux convertir l'algorithme en binaire (ou s'il est en, disons base 256 pour utiliser char
s pour la facilité, je pourrais juste l'utiliser). Je dis cela parce que si vous expliquez cela pourrait être plus facile pour vous d'expliquer dans la base 10 :).
Quelles autres conditions avez-vous utilisées pour obtenir le résultat? Pourquoi les chiffres répétés "01", "01", "10" et "0011" ne sont-ils pas indiqués? – Guffa
@Guffa Mon raisonnement était de mettre les 1 en premier parce que les zéros en tête ne sont pas [significatifs] [1], alors que les zéros en fin le sont. Si le nombre était quelque chose comme, "111.010101 ...", les nombres répétitifs seraient "01" parce que dans ce cas le premier 0 * est * significatif. [1]: http: //en.wikipedia.org/wiki/Significant_digits – Imagist
@ Guffa (suite) Ce n'est pas important pour moi cependant. Si vous me disiez comment le faire d'une manière qui a retourné "01", "01", "01" et "0011", je serais heureux. :) – Imagist