Pas mal !
Pour HP28S (bien d'autre du même type).
Code : Tout sélectionner
« 0
DO
SWAP 5 / IP SWAP OVER +
UNTIL OVER
END
SWAP ROP
»
'nZFACT' STO
Bon d'accord
badaze va trouver cela compliqué.
On peut faire récurssif (et plus court):
Code : Tout sélectionner
« IP % arrondi à l'entier inférieur
IF DUP % Test implicitement n=0
THEN DUP 5 / nZFACT + % divise par cinq et appel récursif
ELSE 0 % retourne 0 si n=0
END
»
'nZFACT' STOP
Utilisation
n nZFACT retourne n au niveau 2: et le nombre de zéro à la fin de n! sur le niveau 1:
Mais le vrai challange c'est de calculer les factorielles avec tous les chiffres sans utiliser les objet entiers long du HP-49 !
Par exemple on peut (théoriquement) calculer tous les chiffres de 443! sur un SHARP PC-1211 avec la programme suivant :
Code : Tout sélectionner
1 :CLEAR :C=|E10 :B=9 :A(B)=1 :F=1
2 :"N" INPUT " N = " ;G :IF G<>F GOTO 6
3 :"=" BEEP 1 :FOR E=B TO 9STEP -1:A=E-8
4 :PRINT USING "####";F;"!=";A;">";USING "###########";A(E);" <" :NEXT E :GOTO 2
5 :"F" AREAD G :IF G=F GOTO 3
6 :IF G<F GOTO 11
7 :FOR D=F+1 TO G : H=0 :E=8
8 :E=E+1 :A=H :H=INT((DA(E)+H)/C) :A(E)=DA(E)+A-CH :IF E<B GOTO 8
9 :IF H LET B=B+1, A(B)=H
10 :PAUSE D,G :NEXT D :F=G :GOTO 3
MEM
1170STEPS 146MEMORIES
Utilisation :
Comme le calcul est long, surtout sur ce pocket, et comme les chiffres sont en mémoire, la dernière factorielle calculée est mémorisée afin de ne pas reprendre la calcul des n*(n+1) depuis de début. Il faut évidemment demander le calcul avec des n croissants sinon une erreur se produit à la ligne 6 : 2............
Initialiser la première fois en tapant RUN (cela remet à zéro la mémoire initialisée avec 1!=1)
A l'invite " N = ?" entrer n.
N peut aussi être entrer en mode DEF avec le raccourci [ SHIF ][ F ] et une fonction AREAD prend le n à l'affichage.
Le SHARP effectue ensuite les calculs (d'autant plus long que n est grand)
Pour faire patienter, la progression est affichée à chaque calcul d'une factorielle.
La fin du calcul est indiquée par un BEEP t le résultat s'affiche.
Le résultat est affiché par paquet de 10 chiffres en commençant par ceux de poids les plus élevés. L'indice est rapellé pour faciliter la transcription.
Le résultat peut être ré-affiché à volonté par le raccourci [ SHIFT][ =]
Exemple :
Code : Tout sélectionner
RUN
N = 5 [ENTER]
2 5
3 5
4 5
5 5
{bip}
5!= 1> 120 <
[SHIFT][ N ]
N = 18 [ENTER]
6 18
7 18
{. . .}
18 18
{bip}
18!= 2> 640237 <
18!= 1> 3705728000 < qui se lit 18 ! = 640237 3705728000.
Il reste plus de 146 MEMORIES, donc on peut en théorie calculer des factorielles jusqu’à 1610 chiffres.
En théorie, car le temps de calcul croît de façon exponentielle avec n.
J’attends toujours le résultat 443 ! lancé depuis le début de cette après-midi !