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;
}