Nombre palindrome

Nombre palindrome - Algo - Programmation

Marsh Posté le 09-04-2006 à 17:03:07    

Bonjour  
j'ai un nombre (que je ne peux pas prendre comme chaine de caractère)  
et je dois savoir si c'est un palindrome ou pas.  
j'ai tout d'abord crée une fonction qui calcule le nombre de chiffre qui constitue le nombre donnée,ensuite une autre qui tire chaque chiffre en divisant succesivement par les puissance de 10 (en fonction de sa place)  
et le compare a son symetrique.  
si vous avez compris quelque chose,est ce qui il n'y aurait pas une autre methode plus simple (j'ai entendu parler d'inverser le nombre.....)  
si vous pouvez m'aider merci d'avance.

Reply

Marsh Posté le 09-04-2006 à 17:03:07   

Reply

Marsh Posté le 10-04-2006 à 01:55:43    

joli problème mathématique.
 

Code :
  1. // retourne le nombre de chiffres d'un nombre
  2. fonction nombreDeChiffres(nombre: entier positif) retourne entier positif
  3. faire
  4.   retourne ceil(log10(nombre));
  5. fait
  6. // retourne un chiffre d'un nombre
  7. fonction extraireChiffre(nombre: entier positif, numero: entier positif) retourne entier positif
  8. faire
  9.   retourne (nombre%(10**(numero+1)))/(10**numero);
  10. fait
  11. fonction estPalindrome(nombre: entier positif): retourne booléen
  12. faire
  13.   nb_chiffres: entier positif;
  14.   nb_comparaisons: entier positif;
  15.   nb_chiffres:=nombreDeChiffres(nombre);
  16.   nb_comparaisons:=nb_chiffres/2; // division entière
  17.   // comparer les premiers chiffres avec les derniers
  18.   // si nb_chiffres==1, nb_comparaisons==0, ne boucle pas
  19.   pour i de 0 à nb_comparaisons
  20.   faire
  21.     si extraireChiffre(nombre,i) != extraireChiffre(nombre,nb_chiffres-1-i)
  22.     alors retourne faux;
  23.   fait
  24.   retourne vrai;
  25. fait

Reply

Marsh Posté le 10-04-2006 à 18:57:38    

C'est quand-même plus simple en inversant le nombre...

Code :
  1. fonction estPalindrome(nombre: entier positif): retourne booléen
  2. faire
  3.   nb: entier positif
  4.   nbInversé: entier positif
  5.  
  6.   nb := nombre
  7.   nbInversé := 0
  8.   tant que nb > 0 faire
  9.     nbInversé := nbInversé * 10 + (nb modulo 10)
  10.     nb := nb / 10
  11.   fait
  12.   retourne (nombre = nbInversé)
  13. fait


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed