5.26 3.4

发布时间 2023-05-26 00:11:12作者: 席

一、问题

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

二、分析

对于要判定的数 n,计算出其平方后(存于 a),按照“回文数”的定义要将最高位与最低位、次高位与次低位······进行比较,若彼此相等则为回文数。此算法需要知道平方数的位数,再一一将每一位分解、比较,此方法对于位数已知且位数不是太多的数来说比较适用。
此问题可借助数组来解决。将平方后的(a 的) 每一位进行分解,按从低位到高位的顺序依次暂存到数组中,再将数组中的元素按照下标从大到小的顺序重新将其组合成一个数k(如n=15,则a225且k-522),若a等于k则可判定a为回文数。

三、代码

#include<iostream>
using namespace std;
void main()
{
int m[16],n,i,t,count=0;
long unsigned a,k;
cout<<"No. number it's square(palindrome)"<<endl;
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)
cout<<++count<<" "<<n<<" "<<n*n<<endl;
}
}

 四、结果