Compter le nombre de zéro à la fin d'un nombre
Résolu
Bonjour,
Je dois calculer le nombre de zéro à a fin d'une valeur issue de la fonction factorielle. Cependant j'ai une erreur pour certaine valeur, ce que je n'arrive pas à comprendre. Par exemple, pour 23!, il compte 1 zéro alors qu'il y en a 4.
Voici le programme en question:
Merci d'avance.
Je dois calculer le nombre de zéro à a fin d'une valeur issue de la fonction factorielle. Cependant j'ai une erreur pour certaine valeur, ce que je n'arrive pas à comprendre. Par exemple, pour 23!, il compte 1 zéro alors qu'il y en a 4.
Voici le programme en question:
def facto(n):
if n==0:
return 1
else:
return n*facto(n-1)
def zero(n):
nbre=facto(n)
zero=0
while nbre!=0:
if nbre%10==0:
zero=zero+1
nbre=nbre/10
return(zero)
Merci d'avance.
Configuration: Windows / Chrome 89.0.4389.114
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
1) utilise les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
2) ajoute des print() dans ton code, afin de comprendre ce qu'il fait. -
Bonjour,
Comme le dit yg_be, l'opérateur/
ne calcule pas une division entière en python3 (contrairement à python2), donc je suppose que tu voulais utiliser l'opérateur//
.
Note que la fonction factorielle est disponible de base en python :
from math import factorial print(factorial(23))
Une approche peu élégante mais qui marche consiste à transformer le résultat defacto(n)
sous forme de chaine, de récupérer sa longueur, puis de supprimer tous les 0 à droite de cette chaîne (e.g. avec la méthoderstrip
)
s = str(facto(23)) print(len(s) - len(s.rstrip("0")))
Bonne chance -
J'ai trouvé une piste et est modifié en fonction mais toujours la même erreur à 23...
def facto(n):
if n==0:
return 1
else:
return n*facto(n-1)
def zero(n):
nbre=facto(n)
zero=0
while nbre>0:
if nbre%10==0:
zero=zero+1
nbre=nbre/10
else:
break
return(zero)