求回文数


/*打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)*/

法一:转化为字符串

#include
#include 
using namespace std;
bool ishui(int x) //判断是否是回文数
{
    if (x < 10)return true; string shu;
    shu = to_string(x);//将数x转化为字符串判断
    int i = 0, j = shu.size()-1;
    while (shu[i]==shu[j]) 
    {
        i++; j--;
        if (i == j || i - 1 == j)return true;//奇数项位数时i==j结束;偶数项位数时i-1==j结束。
    }
    return false; 
}
int main()
{
    int i, k;
    for (int i = 0; i < 256; i++)
    {
        if (ishui(i * i))printf("%d\n", i);
    }
    return 0;
}

法二:数字按位判断

#include
int main()
{
    int m[16], n, i, t, count = 0;
    long unsigned a, k;
    printf("No.    number     it's square(palindrome)\n");
    for (n = 1; n < 256; n++)  /*穷举n的取值范围*/
    {
        k = 0; t = 1; a = n * n;  /*计算n的平方*/
        for (i = 0; a != 0; i++)  /*从低到高分解数a的每一位存于数组m[1]~m[16]*/
        {
            m[i] = a % 10;
            a /= 10;
        }
        for (; i > 0; i--)
        {
            k += m[i - 1] * t;  /*t记录某一位置对应的权值 */
            t *= 10;
        }
        if (k == n * n)
            printf("%2d%10d%10d\n", ++count, n, n * n);
    }
    return 0;
}