Проверка на полиндром
Решаю задачи по 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 шт):
В комментариях уже всё объяснили, ну а в том, что касается кода... Разбейте строку на массив символов. И в цикле проверяйте:
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() - метод возведения в степень. Эту операцию надо проводить в цикле.
Как вариант, вы можете перевернуть число и сравнить оригинал с перевертышем
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
Я дико извиняюсь за то, что код привожу на 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;
}