/**
* 【程序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;
}