Проверка на полиндром

Решаю задачи по java. Дошел до интересной задачи про полиндромы. Суть такая - введите число и проверть его на полиндромность. Я не понимаю как это мне сделать?! Помогите.

public static boolean iSPolindrome (int number) {
    if (number <= 0) {
        return false;
    }
    int left = 0;
    int rigth = 0;

    while (number > 0) {
        rigth = number % 10;
        left = 10 * left + rigth;   
        if (rigth == left) {
            return true;             
        }
        number /= 10;
    }
    return true;
}  

Ответы (3 шт):

Автор решения: Zhenyria

В комментариях уже всё объяснили, ну а в том, что касается кода... Разбейте строку на массив символов. И в цикле проверяйте:

for (int i = 0; i < symbols.length / 2; i++) {
    if (symbols[i] != symbols[symbols.length - 1 - i]) {
        System.out.println("Число - не палиндром!");
        break;
    }
}

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

  • Для левой стороны: num / pow(10, degree - i - 1) % pow(10, i)
  • Для правой стороны: num % pow(10, degree - i - 1) / pow(10, i)

num - это само число i - это переменная цикла. degree - это, собственно, сколько цифр в числе. pow() - метод возведения в степень. Эту операцию надо проводить в цикле.

→ Ссылка
Автор решения: tym32167

Как вариант, вы можете перевернуть число и сравнить оригинал с перевертышем

public static void main(String[] args) {
    System.out.println(isPalindrome(123));
    System.out.println(isPalindrome(321));
    System.out.println(isPalindrome(121));
    System.out.println(isPalindrome(212));
}

public static boolean isPalindrome(int number) {
    int revert = revertNUmber(number);
    return revert == number;
}

public static int revertNUmber(int number) {
    int ret = 0;
    while (number > 0) {
        ret += number % 10;
        number = number / 10;
        if (number > 0) ret *= 10;
    }
    return ret;
}

Вывод

false
false
true
true
→ Ссылка
Автор решения: LShadow77

Я дико извиняюсь за то, что код привожу на C++, а не Java. Полагаю, что главное тут - алгоритм, и переписать его на Java не составит особого труда, тем более что эти два языка очень похожи. Не содержит строки и массивы, что по условию вашей задачи должно подходить:

#include <stdio.h>
#include <math.h>

typedef unsigned int uint;

int main()
{
    uint num,left,right;

    printf("Enter the number: ");
    scanf("%u", &num);

    uint order = 0;
    if (num) order = floor(log10(num));
    uint denum = round(pow(10.0,order));

    bool bPalindrome = true;
    left = right = num;
    order = (order+1)>>1;

    for (uint i=0; i<order; ++i)
    {
        uint left_digit = left/denum;
        uint right_digit = right%10;
        if (left_digit!=right_digit)
        {
            bPalindrome = false;
            break;
        }

        left%= denum;
        denum/= 10;
        right/= 10;
    }

    if (bPalindrome) printf("The number %u is palindrome\n",num);
    else printf("The number %u is NOT palindrome\n",num);

    return 0;
}
→ Ссылка