求一个整数是否是回文(正着念和反着念都一样)

要求:不需要额外的空间。
分析:
1、负整数是回文? (例如,-1)(NO)
2、如果你正在考虑的整数转换为字符串,请注意使用额外空间的限制。
3、可以尝试扭转一个整数。前提是你已经解决了这个问题“反向整型”颠倒整数可能溢出。

新思路:
不断地取第一位和最后一位(10 进制下)进行比较,相等则取第二位和倒数第二位,直到完成比较或者中途找到了不一致的位。

CODE

#define  _CRT_SECURE_NO_WARNINGS
#include
using namespace std;

bool IsPalindrome(int x)
{
    if (x < 0)
    {
        return false;
    }
    int divsion = 1;
    while (x / divsion >= 10)
    {
        divsion *= 10;
    }
    while (x)
    {
        int tmp = x/divsion;
        if (tmp == x % 10)
        {
            x = x%divsion / 10;//将比较过的最高位去掉得到下一次要比较的
            divsion /= 100;
        }
        else
        {
            return false;
        }
    }
    return true;
}

void test()
{
    int x = 12344321;
    cout << IsPalindrome(x) << endl;
}

int main()
{
    test();
    system("pause");
    return 0;
}

你可能感兴趣的:(C/C++)