ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 10 Nov 2006 13:02 Sujet du message: |
|
|
Bonjour, on va écrire quelques procédures
floor(log10(n))+1 donne le nb total de chiffres dans n
Code: |
> chiffres:=proc(n::posint)
> # cette procédure donne la liste des chiffres de n
> local i,L,n1,q;
> i:=floor(log10(n))+1:
> L:=NULL: n1:=n;
> while n1>0 do
> i:=i-1:
> q:=floor(n1/10^i):
> n1:=n1-q*10^i:
> L:=L,q
> end do:
> [L]
> end proc:
> chiffres(5782148);
[5, 7, 8, 2, 1, 4, 8]
Autre possibilité:
> # Cette fonction donne la liste des chiffres dans l'autre sens
> convert(5782148,base,10);
[8, 4, 1, 2, 8, 7, 5]
|
Code: |
> compter:=proc(n::posint, k::nonnegint)
> # cette procédure compte le nb de fois où intervient k dans l'ecriture du nb n et fait appel à la procédure chiffres précédente
> local L,nb,i;
> L:=chiffres(n); nb:=0;
> for i in L do
> if i=k then nb:=nb+1 end if
> end do;
> nb
> end proc:
> compter(5782148,8);
2
> compter(5782148,0);
0
|
Compter le nb de zéros terminant 50!
Code: |
> L:=convert(50!,base,10);
L := [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 5, 0, 6, 9, 8, 6, 5,
1, 4, 6, 7, 7, 3, 4, 4, 8, 8, 6, 7, 4, 6, 0, 6, 6, 1, 8, 0, 6,
2, 1, 6, 3, 4, 0, 8, 7, 3, 3, 1, 7, 1, 0, 2, 3, 9, 0, 4, 1, 4,
0, 3]
> k:=1: nb:=0: while L[k]=0 do nb:=nb+1:k:=k+1 end do: nb;
12
|
Donc 12 zéros à la fin de 50!
Je vous laisse compter de la même façon pour 5000!
A+ |
|