J'apprends Python à travers les problèmes de Project Euler. Pour problem 40 j'ai écrit ce code:Qu'est-ce qui ne va pas avec mon "digit finder" en python?
import math
i = 1
counter = 0
while counter <= 1000000:
MMM = int(math.log(i, 10)) + 1
counter = counter + MMM
V = math.log(i, 10)
print(i, counter, MMM, V)
i += 1
Il est censé revenir le numéro contenant le chiffre Nième. Fondamentalement, ceci est supposé garder une trace de ce qui se passerait si je concatenais les entiers de 1 à n'importe quoi dans un autre nombre. Le but est de déterminer ce qu'est un chiffre spécifique. Ce code fonctionne en dessous d'un certain seuil, cependant, au moment où il arrive au millionième chiffre, il est désactivé par un. Qu'est-ce que j'oublie ici? J'ai vu d'autres implémentations qui font gagner du temps, mais je suis plus intéressé à savoir pourquoi le compte devient mauvais à un moment donné
Edit:
remplaçant
MMM = int(math.log(i, 10)) + 1
avec
MMM = len(str(i))
œuvres comme un champion!
Bien que ce soit sympa d'avoir une solution entièrement numérique, il faudra attendre que je puisse faire confiance aux fonctions de journalisation en Python.
grand, grand, grand indice: ne pas penser à cela comme un nombre fractionnaire, pensez à ce que un string. –
Je me suis assez vite qu'il devrait être fait en utilisant des chaînes, mais après avoir compilé une chaîne assez longue pour contenir 1000000 chiffres je me suis dit qu'il devrait y avoir un moyen de « compte » dont le nombre en annexe a quel chiffre et l'indice dans ce une façon de savoir quels chiffres étaient réellement représentés par le numéro en cours d'ajout. Le code que j'ai écrit fait cela, la valeur du compteur donne le numéro du dernier chiffre du numéro en cours d'ajout. Cependant, quelque part il y a une panne et le compteur est éteint par un. Je veux savoir pourquoi et quand cela arrive. – Jim
Juste pour clarifier ce qui se passe derrière mes maths. La partie entière du journal commun de n'importe quel nombre est le nombre de chiffres moins un. (Pour autant que je sais ...) Donc, si j'ajoute un dans le journal commun des numéros successifs et garder une trace de ces valeurs acheter en gardant un total en cours d'exécution, le chiffre Nième doit être contenu par le nombre qui est ajoutée lorsque le compteur total est plus grand que N par exemple: quand le nombre 366 est ajouté il y a 987 chiffres, donc il contient les 988ème 989ème et 990ème chiffres. – Jim