web-dev-qa-db-fra.com

Comment vérifier si un numéro est un palindrome?

Comment vérifier si un numéro est un palindrome?

N'importe quel langage. N'importe quel algorithme. (sauf l'algorithme consistant à transformer le nombre en chaîne puis à l'inverser).

120
Esteban Araya

Ceci est un des problèmes du projet Euler . Quand je l'ai résolu dans Haskell, j'ai fait exactement ce que vous suggérez, convertissez le nombre en chaîne. Il est alors trivial de vérifier que la chaîne est un pallindrome. Si cela fonctionne assez bien, alors pourquoi se donner la peine de le rendre plus complexe? Être pallindrome est une propriété lexicale plutôt que mathématique.

120
Dan Dyer

Pour tout nombre donné:

 n = num;
 rev = 0;
 while (num > 0)
 {
      Dig = num % 10;
      rev = rev * 10 + Dig;
      num = num / 10;
 }

Si n == rev, alors num est un palindrome:

cout << "Number " << (n == rev ? "IS" : "IS NOT") << " a palindrome" << endl;
261
Jorge Ferreira
def ReverseNumber(n, partial=0):
    if n == 0:
        return partial
    return ReverseNumber(n // 10, partial * 10 + n % 10)

trial = 123454321    
if ReverseNumber(trial) == trial:
    print("It's a Palindrome!")

Fonctionne uniquement pour les entiers. L’énoncé du problème ne dit pas clairement si les nombres en virgule flottante ou les zéros à gauche doivent être pris en compte.

24
Mark Ransom

Au-dessus de la plupart des réponses, le problème est que la variable int peut éventuellement déborder.

Reportez-vous à http://leetcode.com/2012/01/palindrome-number.html

boolean isPalindrome(int x) {
    if (x < 0)
        return false;
    int div = 1;
    while (x / div >= 10) {
        div *= 10;
    }
    while (x != 0) {
        int l = x / div;
        int r = x % 10;
        if (l != r)
            return false;
        x = (x % div) / 10;
        div /= 100;
    }
    return true;
}
20
Jiaji Li
int is_palindrome(unsigned long orig)
{
  unsigned long reversed = 0, n = orig;

  while (n > 0)
  {
    reversed = reversed * 10 + n % 10;
    n /= 10;
  }

  return orig == reversed;
}
14
Robert Gamble

Poussez chaque chiffre sur une pile, puis supprimez-les. Si c'est la même chose d'avant en arrière, c'est un palindrome.

9
Grant Limberg

Je n'ai remarqué aucune réponse qui résolve ce problème en n'utilisant aucun espace supplémentaire, c'est-à-dire que toutes les solutions que j'ai vues utilisaient une chaîne ou un autre entier pour inverser le nombre, ou d'autres structures de données. 

Bien que des langages tels que Java recouvrent un dépassement d'entier, ce comportement n'est pas défini dans des langages tels que C. [Essayez d'inverser 2147483647 (Integer.MAX_VALUE) en Java]. mais, stylistiquement, je n'aime pas trop cette approche.

Maintenant, le concept de nombre palindromique est que le nombre doit lire la même chose en avant et en arrière. Génial. En utilisant cette information, nous pouvons comparer le premier chiffre et le dernier chiffre. Trick est, pour le premier chiffre, nous avons besoin de l'ordre du numéro. Dites, 12321. Si nous divisons cela par 10000, nous aurions le premier 1. Le dernier 1 peut être récupéré en prenant le mod avec 10. Maintenant, pour le réduire à 232. (12321 % 10000)/10 = (2321)/10 = 232. Et maintenant, il faudrait réduire le facteur 10000 de 2. Alors, passons maintenant au code Java ...

private static boolean isPalindrome(int n) {
    if (n < 0)
        return false;

    int div = 1;
    // find the divisor
    while (n / div >= 10)
        div *= 10;

    // any number less than 10 is a palindrome
    while (n != 0) {
        int leading = n / div;
        int trailing = n % 10;
        if (leading != trailing)
            return false;

        // % with div gets rid of leading digit
        // dividing result by 10 gets rid of trailing digit
        n = (n % div) / 10;

        // got rid of 2 numbers, update div accordingly
        div /= 100;
    }
    return true;
}

Edité selon la suggestion de Hardik afin de couvrir les cas où le nombre contient des zéros.

8
Debosmit Ray

En Python, il existe un moyen rapide et itératif. 

def reverse(n):
    newnum=0
    while n>0:
        newnum = newnum*10 + n % 10
        n//=10
    return newnum

def palindrome(n):
    return n == reverse(n)

Cela évite également les problèmes de mémoire liés à la récursivité (comme les erreurs StackOverflow en Java)

6
ytpillai

sauf en faisant du nombre une chaîne puis en inversant la chaîne.

Pourquoi rejeter cette solution? Il est facile à mettre en œuvre et lisible . Si on vous demandait sans ordinateur si 2**10-23 est un palindrome décimal, vous devriez le tester en l'écrivant en décimal.

En python au moins, le slogan "Les opérations sur les chaînes de caractères sont plus lentes que l'arithmétique" est en réalité faux. J'ai comparé l'algorithme arithmétique de Smink à l'inversion de chaîne simple int(str(i)[::-1]). Il n'y avait pas de différence significative de vitesse - il est arrivé que l'inversion de chaîne était légèrement plus rapide.

Dans les langages de bas niveau (C/C++), le slogan peut être utilisé, mais un risque de déborder des erreurs avec un grand nombre.


def reverse(n):
    rev = 0
    while n > 0:
        rev = rev * 10 + n % 10
        n = n // 10
    return rev

upper = 10**6

def strung():
    for i in range(upper):
        int(str(i)[::-1])

def arithmetic():
    for i in range(upper):
        reverse(i)

import timeit
print "strung", timeit.timeit("strung()", setup="from __main__ import strung", number=1)
print "arithmetic", timeit.timeit("arithmetic()", setup="from __main__ import arithmetic", number=1)

Résultats en secondes (bas est mieux):

cordée 1.50960231881
arithmétique 1.69729960569

5
Colonel Panic

Juste pour le plaisir, celui-ci fonctionne également.

a = num;
b = 0;
while (a>=b)
{
  if (a == b) return true;
  b = 10 * b + a % 10;
  if (a == b) return true;
  a = a / 10;
}
return false;
4
Toon Krijthe

Voici une version de schéma qui construit une fonction qui fonctionnera contre n'importe quelle base. Il a un contrôle de redondance: retourne rapidement false si le nombre est un multiple de la base (se termine par 0) ..__ Et il ne reconstruit pas la totalité du nombre inversé, seulement la moitié. C'est tout ce dont nous avons besoin.

(define make-palindrome-tester
   (lambda (base)
     (lambda (n)
       (cond
         ((= 0 (modulo n base)) #f)
         (else
          (letrec
              ((Q (lambda (h t)
                    (cond
                      ((< h t) #f)
                      ((= h t) #t)
                      (else
                       (let* 
                           ((h2 (quotient h base))
                            (m  (- h (* h2 base))))
                         (cond 
                           ((= h2 t) #t)
                           (else
                            (Q h2 (+ (* base t) m))))))))))           
            (Q n 0)))))))
4
z5h

Le moyen le plus rapide que je connaisse:

bool is_pal(int n) {
  if (n % 10 == 0) return 0;
  int r = 0;
  while (r < n) {
    r = 10 * r + n % 10;
    n /= 10;
  }
  return n == r || n == r / 10;
}
4
Flowers

J'ai répondu au problème d'Euler en utilisant une méthode très brutale. Naturellement, il y avait un algorithme beaucoup plus intelligent à l'écran lorsque je suis arrivé au nouveau fil de discussion associé déverrouillé. À savoir, un membre qui est passé par la poignée Begoner avait une telle approche nouvelle que j'ai décidé de réimplémenter ma solution en utilisant son algorithme. Sa version était en Python (en utilisant des boucles imbriquées) et je l'ai réimplémentée en Clojure (en utilisant une seule boucle/récurrente).

Ici pour votre amusement:

(defn palindrome? [n]
  (let [len (count n)]
    (and
      (= (first n) (last n))
      (or (>= 1 (count n))
        (palindrome? (. n (substring 1 (dec len))))))))

(defn begoners-palindrome []
  (loop [mx 0
         mxI 0
         mxJ 0
         i 999
         j 990]
    (if (> i 100)
      (let [product (* i j)]
        (if (and (> product mx) (palindrome? (str product)))
          (recur product i j
            (if (> j 100) i (dec i))
            (if (> j 100) (- j 11) 990))
          (recur mx mxI mxJ
            (if (> j 100) i (dec i))
            (if (> j 100) (- j 11) 990))))
      mx)))

(time (prn (begoners-palindrome)))

Il y avait aussi des réponses communes à LISP, mais elles étaient impossibles à supporter.

4
Chris Vest

Solution récursive en Ruby, sans convertir le nombre en chaîne

def palindrome?(x, a=x, b=0)
  return x==b if a<1
  palindrome?(x, a/10, b*10 + a%10)
end

palindrome?(55655)
3
dre-hh

Version Golang:

package main

import "fmt"

func main() {
    n := 123454321
    r := reverse(n)
    fmt.Println(r == n)
}

func reverse(n int) int {
    r := 0
    for {
        if n > 0 {
            r = r*10 + n%10         
            n = n / 10
        } else {
            break
        }
    }
    return r
}
3
Thomas Modeneis

Détachez les premier et dernier chiffres et comparez-les jusqu'à épuisement. Il peut rester un chiffre ou non, mais dans tous les cas, si tous les chiffres sautés correspondent, il s'agit d'un palindrome.

2
Eli

Voici une autre solution en c ++ utilisant des modèles. Cette solution fonctionnera pour la comparaison de chaînes palindromes insensible à la casse.

template <typename bidirection_iter>
bool palindrome(bidirection_iter first, bidirection_iter last)
{
    while(first != last && first != --last)
    {
        if(::toupper(*first) != ::toupper(*last))
            return false;
        else
            first++;
    }
    return true;
}
2
VikramChopde

voici une version f #:

let reverseNumber n =
    let rec loop acc = function
    |0 -> acc
    |x -> loop (acc * 10 + x % 10) (x/10)    
    loop 0 n

let isPalindrome = function
    | x  when x = reverseNumber x -> true
    | _ -> false
1
Omu

Pour vérifier si le numéro indiqué est Palindrome ou non (code Java)

class CheckPalindrome{
public static void main(String str[]){
        int a=242, n=a, b=a, rev=0;
        while(n>0){
                    a=n%10;  n=n/10;rev=rev*10+a;
                    System.out.println(a+"  "+n+"  "+rev);  // to see the logic
               }
        if(rev==b)  System.out.println("Palindrome");
        else        System.out.println("Not Palindrome");
    }
}
1
sort_01out
def palindrome(n):
    d = []
    while (n > 0):
        d.append(n % 10)
        n //= 10
    for i in range(len(d)/2):
        if (d[i] != d[-(i+1)]):
            return "Fail."
    return "Pass."
1
Rock

J'utilise toujours cette solution python en raison de sa compacité.

def isPalindrome(number):
    return int(str(number)[::-1])==number
1
user2343020

Un nombre est palindrome si sa représentation sous forme de chaîne est palindrome:

def is_palindrome(s):
    return all(s[i] == s[-(i + 1)] for i in range(len(s)//2))

def number_palindrome(n):
    return is_palindrome(str(n))
1
hughdbrown

une méthode avec un facteur constant un peu meilleur que la méthode @sminks:

num=n
lastDigit=0;
rev=0;
while (num>rev) {
    lastDigit=num%10;
    rev=rev*10+lastDigit;
    num /=2;
}
if (num==rev) print PALINDROME; exit(0);
num=num*10+lastDigit; // This line is required as a number with odd number of bits will necessary end up being smaller even if it is a palindrome
if (num==rev) print PALINDROME
1
eku

Un grand nombre des solutions publiées ici inversent le nombre entier et le stockent dans une variable utilisant un espace supplémentaire, à savoir O(n), mais voici une solution avec O(1) space.

def isPalindrome(num):
    if num < 0:
        return False
    if num == 0:
        return True
    from math import log10
    length = int(log10(num))
    while length > 0:
        right = num % 10
        left = num / 10**length
        if right != left:
            return False
        num %= 10**length
        num /= 10
        length -= 2
    return True
1
Sunny Raj

Voici la réponse dans Swift. Il lit les nombres de gauche et de droite et les compare s’ils sont identiques . De cette manière, nous ne ferons jamais face à un problème de dépassement d’entier(qui peut se produire avec la méthode du nombre inversé)comme nous ne créons pas un autre numéro. 

Pas:

  1. Obtenir la longueur du nombre
  2. Boucle de longueur + 1(first) -> 0
  3. Obtenez le chiffre et le dernier chiffre
  4. si les deux chiffres ne sont pas égaux, retourne faux, car le nombre n'est pas palindrome
  5. je --
  6. ignorer le dernier chiffre de num (num = num/10)
  7. fin des toilettes retour vrai

    func isPalindrom(_ input: Int) -> Bool {
           if input < 0 {
                return false
            }
    
            if input < 10 {
                return true
            }
    
            var num = input
            let length = Int(log10(Float(input))) + 1
            var i = length
    
            while i > 0 && num > 0 {
    
                let ithDigit = (input / Int(pow(10.0, Double(i) - 1.0)) ) % 10
                let r = Int(num % 10)
    
                if ithDigit != r {
                    return false
                }
    
                num = num / 10
                i -= 1
            }
    
            return true
        }
    
0
Adnan Aftab

Essaye ça:

reverse = 0;
    remainder = 0;
    count = 0;
    while (number > reverse)
    {
        remainder = number % 10;
        reverse = reverse * 10 + remainder;
        number = number / 10;
        count++;
    }
    Console.WriteLine(count);
    if (reverse == number)
    {
        Console.WriteLine("Your number is a palindrome");
    }
    else
    {
        number = number * 10 + remainder;
        if (reverse == number)
            Console.WriteLine("your number is a palindrome");
        else
            Console.WriteLine("your number is not a palindrome");
    }
    Console.ReadLine();
}
}
0
vivek
 public class Numbers
 {
   public static void main(int givenNum)
   { 
       int n= givenNum
       int rev=0;

       while(n>0)
       {
          //To extract the last digit
          int digit=n%10;

          //To store it in reverse
          rev=(rev*10)+digit;

          //To throw the last digit
          n=n/10;
      }

      //To check if a number is palindrome or not
      if(rev==givenNum)
      { 
         System.out.println(givenNum+"is a palindrome ");
      }
      else
      {
         System.out.pritnln(givenNum+"is not a palindrome");
      }
  }
}
0
BLaaaaaa

Je ne sais pas si c'est la meilleure réponse, et je suis novice en programmation. (c'est en Java)

import Java.util.*;

public class Palin {

    public static void main(String[] args) {
        Random randInt = new Random();

        Scanner kbd = new Scanner(System.in);
        int t = kbd.nextInt(); //# of test cases;
        String[] arrPalin = new String[t]; //array of inputs;
        String[] nextPalin = new String[t];
        for (int i = 0; i < t; i++) {
            arrPalin[i] = String.valueOf(randInt.nextInt(2147483646) + 1);
            System.out.println(arrPalin[i]);
        }

        final long startTime = System.nanoTime();

        for (int i = 0; i < t; i++) {
            nextPalin[i] = (unmatcher(incrementer(switcher(match(arrPalin[i])))));
        }

        final long duration = System.nanoTime() - startTime;

        for (int i = 0; i < t; i++) {
            System.out.println(nextPalin[i]);
        }

        System.out.println(duration);

    }

    public static String match(String N) {
        int length = N.length();

        //Initialize a string with length of N
        char[] chars = new char[length];
        Arrays.fill(chars, '0');

        int count = 1;

        for (int i = 0; i < length; i++) {
            if ((i%2) == 0) { //at i = even.
                if (i == 0) {
                    chars[i] = N.charAt(i);
                } else
                    chars[i] = N.charAt(i/2);
            } else //at i = odd
                chars[i] = N.charAt(length - count);
                count++;
        }

        return String.valueOf(chars);
    }

    public static String switcher(String N) {
        int length = N.length();
        char[] chars = new char[length];
        Arrays.fill(chars, '0');

        for (int i = 0; i < length; i++) {
            if (i != 0) {
                if ((i % 2) == 0) {
                    chars[i] = N.charAt(i);
                } else if ((i % 2) != 0) {
                    chars[i] = N.charAt(i - 1);
                }
            }
            if (i == 0) {
                chars[0] = N.charAt(0);
            }
        }
        return String.valueOf(chars);
    }

    public static String incrementer(String N) {
        int length = N.length();
        char[] chars = new char[length];
        Arrays.fill(chars, '0');

        char[] newN = N.toCharArray();

        String returnVal;

        int numOne, numTwo;

        if ((length % 2) == 0) {
            numOne = N.charAt(length-1);
            numTwo = N.charAt(length-2);
            newN[length-1] = (char)(numOne+1);
            newN[length-2] = (char)(numTwo+1);
            returnVal = String.valueOf(newN);
        } else {
            numOne = N.charAt(length-1);
            newN[length-1] = (char)(numOne+1);
            returnVal = String.valueOf(newN);
        }
        return returnVal;
    }

    public static String unmatcher(String N) {
        int length = N.length();
        char[] chars = new char[length];
        Arrays.fill(chars, '0');
        char[] newN = N.toCharArray();

        for (int i = 0; i < length; i++) {
                if (((i % 2) == 0) && (i != 0)) { // for i > 0, even
                    newN[i / 2] = N.charAt(i);
                } else if ((i % 2) == 0 && (i == 0)) { // for i = 0
                    newN[0] = N.charAt(0);
                }
            }
        for (int i = (length/2); i < length; i++) {
            newN[i] = newN[Math.abs(i - (length - 1))];
        }

        return String.valueOf(newN);
    }


}

Donc, pour ce code, entrez un nombre (j'ai fait des nombres aléatoires dont je veux), Il sera converti, par exemple, l'entrée est 172345 à 157423. Ensuite, il le changera en 117722, puis si même le faire 117733 , si impair, faites de même pour le dernier chiffre seulement. Alors rendez-vous 173371. Il ne s'agit pas spécifiquement de trouver un palindrome, mais de rechercher le prochain numéro de palindrome le plus élevé.

0
hs2345

Obtenez simplement le nombre de chiffres du nombre via les fonctions mathématiques, puis effectuez une itération en utilisant les opérations '/' et '%' comme suit. Après x = (x% divider)/10, nous devrions diviser le diviseur par 100 puisque nous avons effectué 2 opérations nulles.

public static boolean isPalindrome(int x) {
            if (x < 0) return false;
            if (x < 10) return true;

            int numDigits = (int)(Math.log10(x)+1);
            int divider = (int) (Math.pow(10, numDigits - 1));
            for (int i = 0; i < numDigits / 2; i++) {
                if (x / divider != x % 10)
                    return false;
                x = (x % divider) / 10;
                divider /= 100;
            }
            return true;
        }
0
huseyin
num = int(raw_input())
list_num = list(str(num))
if list_num[::-1] == list_num:
    print "Its a palindrome"
else:
    print "Its not a palindrom"
0
Jhutan Debnath

Essaye ça: 

print('!* To Find Palindrome Number') 

def Palindrome_Number():

            n = input('Enter Number to check for palindromee')  
            m=n 
            a = 0  

    while(m!=0):  
        a = m % 10 + a * 10    
        m = m / 10    

    if( n == a):    
        print('%d is a palindrome number' %n)
    else:
        print('%d is not a palindrome number' %n)

il suffit de rappeler les fonctions

0
user3615696

Cette solution est assez efficace car j'utilise StringBuilder, ce qui signifie que la classe StringBuilder est implémentée sous la forme d'une séquence de caractères modifiable. Cela signifie que vous ajoutez de nouvelles chaînes ou de nouveaux caractères à un StringBuilder.

 public static boolean isPal(String ss){
   StringBuilder stringBuilder = new StringBuilder(ss);
   stringBuilder.reverse();
   return ss.equals(stringBuilder.toString());
 }
0
Chris Michael

Vérifiez cette solution en Java:

private static boolean ispalidrome(long n) {
        return getrev(n, 0L) == n;
    }

    private static long getrev(long n, long initvalue) {
        if (n <= 0) {
            return initvalue;
        }
        initvalue = (initvalue * 10) + (n % 10);
        return getrev(n / 10, initvalue);
    }
0
Abdou Amari

Code python à une ligne: 

def isPalindrome(number):
    return True if str(number) == ''.join(reversed(str(number))) else False
0
Pradip Das

il semble que le plus simple serait de trouver le nombre opposé et de comparer les deux:

int max =(int)(Math.random()*100001);

    int i;
    int num = max; //a var used in the tests
    int size; //the number of digits in the original number
    int opos = 0; // the oposite number
    int nsize = 1;

    System.out.println(max);

    for(i = 1; num>10; i++)
    {
        num = num/10;
    }

    System.out.println("this number has "+i+" digits");

    size = i; //setting the digit number to a var for later use



    num = max;

    for(i=1;i<size;i++)
    {
        nsize *=10;
    }


    while(num>1)
    {
        opos += (num%10)*nsize;
        num/=10;
        nsize/=10;
    }

    System.out.println("and the number backwards is "+opos);

    if (opos == max )
    {
        System.out.println("palindrome!!");
    }
    else
    {
        System.out.println("aint no palindrome!");
    }
0
Ziv Kesten
public static void main(String args[])
{
    System.out.print("Enter a number: ");
    Scanner input = new Scanner(System.in);
    int num = input.nextInt();
    int number = num;
    int reversenum = 0;
    while (num != 0)
    {
        reversenum = reversenum * 10;
        reversenum = reversenum + num % 10;
        num = num / 10;
    }

    if (number == reversenum)
        System.out.println("The reverse number is " + reversenum + "\nThen the number is palindrome.");
    else
        System.out.println("The reverse number is " + reversenum + "\nThen the number is not palindrome.");

}
0
gadolf

Ceci est mon code Java. Fondamentalement, comparer la première et la dernière valeur de la chaîne et la paire de valeur interne suivante, etc.

    /*Palindrome number*/
    String sNumber = "12321";
    int l = sNumber.length(); // getting the length of sNumber. In this case its 5
    boolean flag = true;
    for (int i = 0; i <= l; ++i) {
        if (sNumber.charAt(i) != sNumber.charAt((l--) -1)) { //comparing the first and the last values of the string
            System.out.println(sNumber +" is not a palindrome number");
            flag = false;
            break;
        }
        //l--; // to reducing the length value by 1 
    }
    if (flag) {
        System.out.println(sNumber +" is a palindrome number");
    }
0
Sucharith

Ce code convertit int en String, puis vérifie si la chaîne est pallindrome. L'avantage est qu'il est rapide, l'inconvénient étant qu'il convertit int en String, compromettant ainsi la solution parfaite à la question. 

static int pallindrome=41012;
static String pallindromer=(Integer.toString(pallindrome));
static int length=pallindromer.length();

public static void main(String[] args) {
    pallindrome(0);
    System.out.println("It's a pallindrome");
}

static void pallindrome(int index){
    if(pallindromer.charAt(index)==pallindromer.charAt(length-(index+1))){
        if(index<length-1){
            pallindrome(++index);
        }
    }
    else{
        System.out.println("Not a pallindrome");
        System.exit(0);
    }
}
0
Ankur Tewari
int reverse(int num)
{
    assert(num >= 0);   // for non-negative integers only.
    int rev = 0;
    while (num != 0)
    {
        rev = rev * 10 + num % 10;
        num /= 10;
    }
    return rev;
}

Cela semblait fonctionner aussi, mais avez-vous envisagé la possibilité que le nombre inversé puisse déborder? En cas de débordement, le comportement est spécifique au langage (pour Java, le nombre est dépassé, mais en C/C++, son comportement n'est pas défini). Beurk.

Il s'avère que comparer depuis les deux bouts est plus facile. Commencez par comparer le premier et le dernier chiffre. S'ils ne sont pas identiques, ce ne doit pas être un palindrome. S'ils sont identiques, coupez un chiffre des deux côtés et continuez jusqu'à ce qu'il ne vous reste plus de chiffres, ce qui vous permettra de conclure qu'il doit s'agir d'un palindrome.

Maintenant, obtenir et couper le dernier chiffre est facile. Cependant, obtenir et couper le premier chiffre de manière générique nécessite un peu de réflexion. La solution ci-dessous s'en occupe.

int isIntPalindrome(int x)
{
    if (x < 0)
    return 0;
    int div = 1;
    while (x / div >= 10)
    {
        div *= 10;
    }

    while (x != 0)
    {
        int l = x / div;
        int r = x % 10;
        if (l != r)
            return 0;
        x = (x % div) / 10;
        div /= 100;
    }
    return 1;
}
0
NewCoder

classe publique PalindromePrime {

 private static int g ,n =0,i,m ; 

 private javax.swing.JTextField jTextField;



 static String b ="";
private static Scanner scanner = new Scanner( System.in );  
public static void main(String [] args) throws IOException {


    System.out.print(" Please Inter Data : "); 
    g = scanner.nextInt();


    System.out.print(" Please Inter Data 2  : "); 
    m = scanner.nextInt();  

    count(g,m);     
    }   

public static    int count(int L, int R) {
    int resultNum = 0;

    for( i= L ; i<= R ;i++){
        int count= 0 ;
        for( n = i ; n >=1 ;n -- ){

            if(i%n==0){             
                count = count + 1 ;
            //  System.out.println("  Data : \n "  +count );    
            }       
        }
        if(count == 2)
        {   
            //b = b +i + "" ;

        String ss=  String .valueOf(i);
        //  System.out.print("\n" +i );     

            if(isPalindrome(i))
            {

            //0 System.out.println("Number : " + i + " is   a palindrome");

                    //number2[b] = Integer.parseInt(number_ayy[b]);

                //String s = String .valueOf(i);
                //System.out.printf("123456", s);
                resultNum++;
            }

            else{

                //*System.out.println("Number : " + i + " is Not  a palindrome");
            }
            //System.out.println("  Data : \n " +ss.length()  );    
        }

    //  palindrome(i);

    }

//  System.out.print("  Data  : "); 
//  System.out.println("  Data : \n "  +b ); 
    return resultNum;


    }


@SuppressWarnings("unused")
public static boolean isPalindrome(int number  ) {
    int p = number; // ประกาศ  p เป็น int ให้เท่ากับ number ของ ตัวที่ มาจาก method 
    int r = 0; //ประกาศ r เป็น int โดยให้มีค่าเรื่องต้นเท่ากับ 0 
    int w = 0 ;
    while (p != 0) {  // เงื่อนไข While ถ้า p ไม่เท่ากับ 0  เช่น  2!= 0 จริง  เข้า  
         w = p % 10; // ประกาศตัว แปร W ให้ เท่ากับค่า p ที่มาจาก parramiter ให้ & mod กับ  10 คือ เช่น  2 % 10 = 2 ; w= 2 ; 3% 10 ; w =3
       r = r * 10 + w;  // (ให้  R ที่มาจาก การประกาศค่ตัวแปร แล้ว * 10) + w  จะมาจากค่า w = p % 10; ที่ mod ไว้  เช่น 0*10 + 2 = 2 
       p = p / 10;  //แล้วใช้ p ที่จมาจากตัว paramiter แล้วมาหาร  10  เพราะถ้าไม่มี ก็จะสามารถพิมพ์ค่าออกมาได้  || ทำไงก็ได้ให้เป็น 0  และเอามาแทนค่ตัวต่อไป 
    }

    // 1 วนวูปเช็คว่า   (p != 0) หรือไม่   โดย  p มาจาก p = number ที่รับมา 
    // 2 r = (r * 10) + (p%10) ;  

    //3   p = p /10 ; เพื่อเช็ค  ว่าให้มันเป็น 0 เพื่อหลุด Loop 
    if (number == r) {
        // for(int count = 0 ; count <i ;count ++){
    String s1 = String.valueOf(i);     

        //countLines(s1);
        System.out.println("Number : " + "'"+s1 +"'"+"  is   a palindrome");

        return true; //เรียก return ไป 

    }
    return false;
}

public static int countLines(String str)
{
    if (str == null || str.length() == 0)
        return 0;
    int lines = 1;
    int len = str.length();
    for( int pos = 0; pos < len; pos++) {
        char c = str.charAt(pos);
        if( c == '\r' ) {


            System.out.println("Line 0 : " + "'"+str );

            lines++;
            if ( pos+1 < len && str.charAt(pos+1) == '\n' )

                System.out.println("Line : " + "'"+str );

                pos++;
        } else if( c == '\n' ) {
            lines++;

            System.out.println("Line 2 : " + "'"+str );

        }
    }
    return lines;
}


public static int countLines1(String sd) throws IOException {
    LineNumberReader lineNumberReader = new LineNumberReader(new StringReader(sd));
    int count = 0 ;
    System.out.printf("Line  : " , count = count + 1 );
    lineNumberReader.skip(Long.MAX_VALUE);
    return lineNumberReader.getLineNumber();
}

}

0
Pong Petrung
public static boolean isPalindrome(int x) {
        int newX = x;
        int newNum = 0;
        boolean result = false;
        if (x >= 0) {
            while (newX >= 10) {
                newNum = newNum+newX % 10;
                newNum = newNum * 10;
                newX = newX / 10;
            }
            newNum += newX;

            if(newNum==x) {
            result = true;
            }
            else {
                result=false;
            }
        }

        else {

            result = false;
        }
        return result;
    }
0
SuL

Voici une liste d'utilisations de solutions sous forme de piles en python: 

def isPalindromicNum(n):
    """
        is 'n' a palindromic number?
    """
    ns = list(str(n))
    for n in ns:
        if n != ns.pop():
            return False
    return True

sauter la pile ne considère que le côté le plus à droite du nombre pour la comparaison et échoue rapidement pour réduire les contrôles

0
lwm

Personnellement je le fais de cette façon, et il n'y a pas de chevauchement; le code cesse de rechercher les caractères correspondants au bon endroit si la chaîne a une longueur paire ou impaire. Certaines des méthodes décrites ci-dessus tenteront de faire correspondre une fois de plus si cela n'est pas nécessaire. 

Si nous utilisons length/2, cela fonctionnera quand même, mais une vérification supplémentaire sera effectuée. Par exemple, "pop" a une longueur de 3. 3/2 = 1.5, donc il arrêtera de vérifier quand i = 2 (puisque 1 <1.5, il vérifiera aussi quand i = 1), mais nous devons arrêter à 0, pas un. Le premier "p" est en position 0 et il va se vérifier par rapport à la longueur-1-0 (position actuelle) qui est le dernier "p" en position 2, puis nous nous retrouvons avec la lettre centrale qui ne nécessite aucune vérification. Lorsque nous faisons la longueur/2, nous nous arrêtons à 1; il se produit donc une vérification supplémentaire avec i étant sur la position 1 (le "o") et la compare à elle-même (longueur-1-i).

// Checks if our string is palindromic.
var ourString = "A Man, /.,.()^&*A Plan, A Canal__-Panama!";
isPalin(ourString);

function isPalin(string) {
// Make all lower case for case insensitivity and replace all spaces, underscores and non-words.
string = string.toLowerCase().replace(/\s+/g, "").replace(/\W/g,"").replace(/_/g,"");
for(i=0; i<=Math.floor(string.length/2-1); i++) {
      if(string[i] !== string[string.length-1-i]) {
        console.log("Your string is not palindromic!");
        break;
      } else if(i === Math.floor(string.length/2-1)) {
        console.log("Your string is palindromic!");
      }
    }
}

https://repl.it/FNVZ/1

0
Shaun L
checkPalindrome(int number)
{
    int lsd, msd,len;
    len = log10(number);
    while(number)
    {
        msd = (number/pow(10,len)); // "most significant digit"
        lsd = number%10; // "least significant digit"
        if(lsd==msd)
        {
            number/=10; // change of LSD
            number-=msd*pow(10,--len); // change of MSD, due to change of MSD
            len-=1; // due to change in LSD
            } else {return 1;}
    }
    return 0;
}
0
MarianG
let isPalindrome (n:int) =
   let l1 = n.ToString() |> List.ofSeq |> List.rev
   let rec isPalindromeInt l1 l2 =
       match (l1,l2) with
       | (h1::rest1,h2::rest2) -> if (h1 = h2) then isPalindromeInt rest1 rest2 else false
       | _ -> true
   isPalindromeInt l1 (n.ToString() |> List.ofSeq)
0
mario

Manière récursive, pas très efficace, juste fournir une option

(Code Python)

def isPalindrome(num):
    size = len(str(num))
    demoninator = 10**(size-1)
    return isPalindromeHelper(num, size, demoninator)

def isPalindromeHelper(num, size, demoninator):
    """wrapper function, used in recursive"""
    if size <=1:
        return True
    else:       
        if num/demoninator != num%10:
            return False
        # shrink the size, num and denominator
        num %= demoninator
        num /= 10
        size -= 2
        demoninator /=100
        return isPalindromeHelper(num, size, demoninator) 
0
user1552891

Voici un moyen.

class Palindrome_Number{
    void display(int a){
        int count=0;
        int n=a;
        int n1=a;
        while(a>0){
            count++;
            a=a/10;
        }
        double b=0.0d;
        while(n>0){
            b+=(n%10)*(Math.pow(10,count-1));
            count--;
            n=n/10;
        }
        if(b==(double)n1){
            System.out.println("Palindrome number");
        }
        else{
            System.out.println("Not a palindrome number");            
        }
    }
}
0
Ranjan Manohar

Je suis allé avec l'approche régulière en convertissant le nombre en chaîne, puis en convertissant encore chaîne en charArray . Parcourant charArray et trouver si nombre à des positions sont égales ou non .. Note.: Ne pas inverser la chaîne.

public bool IsPalindrome(int num)
    {
        string st = num.ToString();
        char[] arr = st.ToCharArray();
        int len = arr.Length;
        if (len <= 1)
        {
            return false;
        }
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] == arr[len - 1])
            {
                if (i >= len)
                {
                    return true;
                }
                len--;
            }
            else
            {
                break;
            }
        }
        return false;
0
Mr. Wonderful