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

Я попытался проверить, является ли число палиндромом с помощью следующего кода:

unsigned short digitsof (unsigned int x)
{
unsigned short n = 0;
while (x)
{
x /= 10;
n++;
}
return n;
}

bool ispalindrome (unsigned int x)
{
unsigned short digits = digitsof (x);

for (unsigned short i = 1; i <= digits / 2; i++)
{
if (x % (unsigned int)pow (10, i) != x % (unsigned int)pow (10, digits - 1 + i))
{
return false;
}
}
return true;
}

Однако следующий код не может проверить палиндромы — false всегда возвращается, даже если число является палиндромом.

Кто-нибудь может указать на ошибку?

(Обратите внимание: мне не интересно превращать его в строку и переворачивать, чтобы увидеть, в чем проблема: скорее, мне интересно знать, где ошибка в приведенном выше коде.)

3

Решение

Проблема заключается в следующем:

x % (unsigned int)pow (10, i)

Давай попробуем:

x =504405
i =3

SO I want 4.

x % 10^3 => 504405 %1000 => 405 NOT 4

Как насчет

x / (unsigned int)pow (10, i -1) % 10
1

Другие решения

Лично я просто собрал бы строку из числа, а затем обработал бы ее как обычную проверку палиндрома (убедитесь, что каждый символ в первой половине совпадает с length()-index).

5

x % (unsigned int)pow (10, i) это не шестая цифра.

1

Просто для получения дополнительной информации! Следующие две функции работают для меня:

double digitsof (double x)
{
double n = 0;
while (x > 1)
{
x /= 10;
n++;
}
return n;
}

bool ispalindrome (double x)
{
double digits = digitsof (x);
double temp = x;
for(double i = 1; i <= digits/2; i++)
{
float y = (int)temp % 10;
cout<<y<<endl;
temp = temp/10;

float z = (int)x / (int)pow(10 , digits - i);
cout<<(int)z<<endl;
x = (int)x % (int)pow(10 , digits - i);

if(y != z)
return false;

}
return true;
}
0

Код для проверки, является ли данный номер палиндромом или нет в JAVA

import java.util.*;
public class HelloWorld{

private static int countDigits(int num) {
int count = 0;
while(num>0) {
count++;
num /= 10;
}
return count;
}
public static boolean isPalin(int num) {
int digs = HelloWorld.countDigits(num);
int divderToFindMSD = 1;
int divderToFindLSD = 1;

for (int i = 0; i< digs -1; i++)
divderToFindMSD *= 10;

int mid = digs/2;

while(mid-- != 0)
{
int msd = (num/divderToFindMSD)%10;
int lsd = (num/divderToFindLSD)%10;
if(msd!=lsd)
return false;

divderToFindMSD /= 10;
divderToFindLSD *= 10;
}
return true;

}

public static void main(String []args) {
boolean isPalin = HelloWorld.isPalin(1221);
System.out.println("Results: " + isPalin);
}
}
0
По вопросам рекламы [email protected]