Compter le nombre de zéro à la fin d'un nombre [Résolu]

Signaler
-
Messages postés
29703
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 avril 2021
-
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:

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

Messages postés
15004
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 avril 2021
825
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.
Messages postés
29703
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 avril 2021
7 066
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 de
facto(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éthode
rstrip
)

s = str(facto(23))
print(len(s) - len(s.rstrip("0")))


Bonne chance
Merci beaucoup ! C'est bien la division qui posait problème !
Messages postés
29703
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 avril 2021
7 066 > SanAntonio94
De rien, bonne continuation !
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)
Messages postés
15004
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 avril 2021
825
cela s'éméliore, en effet.
as-tu ajouté des print() pour comprendre ce qui se passait?
connais-tu l'opérateur de division entière en python?