Palindromes

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Palindromes

Message par Dr. Dri »

Pour changer des palindromes chaines de caracteres, voila une fonction pour savoir si un entier est un palindrome :P

Code : Tout sélectionner

Procedure.l Palindrome(n.l)
  Protected r.l, p.l, d.l, t.l
  
  If n < 0
    r = #False ;le "-" empeche d'avoir un palindrome
  ElseIf n < 10
    r = #True  ;de 0 à 9 on a forcement un palindrome
  Else
    d = n % 10 ;dernier chiffre de n
    p = n
    t = 1
    
    While p / 10 > 0 ;tant qu'il reste des chiffres a enlever
      p / 10 ;retire les chiffres par la droite
      t * 10 ;prepare l'exposant du chiffre a retirer
    Wend
    
    ;n est peut-etre un palindrome
    If p = d
      n = (n - p*t) / 10 ;donc on retire les chiffres aux extremites
      r = Palindrome(n)  ;et on reteste
    Else
      r = #False
    EndIf
    
  EndIf
  
  ProcedureReturn r
EndProcedure

Debug Palindrome(923456789)
Debug Palindrome(923454329)
Dri ;)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Version non récursive ^_^

Code : Tout sélectionner

Procedure.l Palindrome(n.l)
  Protected r.l, p.l, d.l, t.l
  
  If n >= 0
    
    r = #True
    
    While  n >= 10 And r
      d = n % 10
      p = n
      t = 1
      
      While p / 10 > 0
        p / 10
        t * 10
      Wend
      
      If p = d
        n = (n - p*t) / 10
      Else
        r = #False
      EndIf
    Wend
    
  EndIf
  
  ProcedureReturn r
EndProcedure
Dri ;)
Répondre