/**
 * 【程序9】
 * 题目:打印所有不超过n(取n<256)的其平方具有对称性质的数(即回文数)。
 * 程序分析:难点:不像固定数字有确定位数,可直接求出对应位数字是否相等的做法。
 *           该问题在于[0, 255]所有数字开平方后,位数是变化的。
 * 
 * 解决方法:可借助数组来解决。将平方后的(a的)每一位进行分解,按从低位到高位
 *           的顺序依次暂存到数组中,再将数组中的元素按照下标从大到小的顺序重新
 *           将其组合成一个数众(如n=15,则a=225且k=522),若k等于n×n则可判定n为回文数。 
 */

#include<stdio.h>
#include <math.h>

#define N 8
int main()
{
    printf("No.   number   it's square(palindrome)\n");
    int n, no=0;
    for(n=0;n<256;n++)
    {
        int a[N], i, t, temp, result=0, count=0;
        t = n*n;
        for(i=0;t!=0;i++)
        {
            a[i] = t%10;
            t = t/10;
            count += 1;
        }

        for(;i>0;i--)
        {
            temp = a[i-1] * pow(10, count-i);
            result += temp;
        }
        /**
        int k;
        for(;i>0;i--)
        {
            temp = a[i-1] * k;
            result += temp;
            k *= 10;
        }
        **/
        
        if(result == n*n)
            printf("%2d%10d%10d\n", ++no, n, n*n);
        
    }
    
    return 0;
}