Как проверить, является ли число палиндромом? - PullRequest
120 голосов
/ 14 октября 2008

Как проверить, является ли число палиндромом?

Любой язык. Любой алгоритм. (кроме алгоритма преобразования числа в строку и последующего обращения строки).

Ответы [ 50 ]

0 голосов
/ 08 мая 2014

Попробуйте это:

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)

просто перезвоните функциям

0 голосов
/ 14 марта 2016

Этот код преобразует int в String, а затем проверяет, является ли строка pallindrome. Преимущество в том, что он быстрый, недостатком является то, что он преобразует int в строку, тем самым ставя под угрозу идеальное решение вопроса.

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 голосов
/ 14 января 2015

Я пошел с обычным подходом, преобразовав число в строку и затем преобразовав строку в charArray. Проходя через charArray и находите, равны ли числа в позициях или нет. Примечание: не переворачивая строку.

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 голосов
/ 29 июня 2013

Вот решение, использующее списки в виде стеков в 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

выгрузка стека учитывает только правую сторону числа для сравнения, и быстрое уменьшение количества проверок не удается

0 голосов
/ 17 марта 2019
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 голосов
/ 09 февраля 2016
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 голосов
/ 25 июля 2016

Однострочный код Python:

def isPalindrome(number):
    return True if str(number) == ''.join(reversed(str(number))) else False
0 голосов
/ 23 декабря 2013

кажется, что проще всего было бы найти противоположное число и сравнить два:

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 голосов
/ 16 мая 2015
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;
}

Это тоже сработало, но вы рассматривали возможность переполнения обратного числа? Если оно переполняется, поведение зависит от языка (для Java число переворачивается при переполнении, но в C / C ++ его поведение не определено). Тьфу.

Оказывается, сравнивать с двух сторон проще. Сначала сравните первую и последнюю цифры. Если они не совпадают, это не должен быть палиндром. Если они одинаковы, отрежьте одну цифру с обоих концов и продолжайте до тех пор, пока у вас не останется цифр, и вы решите, что это должен быть палиндром.

Теперь получить и расколоть последнюю цифру легко. Тем не менее, получение и нарезка первой цифры в общем виде требует некоторых размышлений. Решение ниже заботится об этом.

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 голосов
/ 13 февраля 2013

Попробуйте это:

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();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...