自然语言解决问题:
对于要判定的数 n,计算出其平方后(存于a),按照“回文数”的定义要将最高位与最低位、次高位与次低位······进行比较,若彼此相等则为回文数。此算法需要知道平方数的位数,再一一将每一位分解、比较,此方法对于位数已知且位数不是太多的数来说比较适用。
此问题可借助数组来解决。将平方后的(a 的)每一位进行分解,按从低位到高位的顺序依次暂存到数组中,再将数组中的元素按照下标从大到小的顺序重新将其组合成一个数k(如n=15,则a225 且k-522),若a等于k则可判定a为回文数。
流程图:
具体代码:
#include <stdio.h>
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++)
{
k=0;t=1;a=n*n;
for(i=0;a!=0;i++)
{
m[i]=a%10;
a/=10;
}
for(;i>0;i--){
k+-m[i-1]*t;
t*=10;
}
if(k==a)
printf("%2d%10d%10d\n",++count,n,n*n);
}
return 0;
}