求回文数
/*打印所有不超过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;
}