/*判断回文数:
1,进制分解:用模运算和整除运算即可,每一位存在数组c
2,回文判断:将c中按长度len对折,判断对应的位是否相同,有一个不同,就不是回文数*/
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n;
while (cin >> n&&n)
{
char c[50];
int sign = 0; //sign=0表示不是回文数
int base[17] = { 0 };
for (int i = 2; i < 17; i++)
{
int m = n;
int len = 0;
//按进制分解
while (m)
{
c[len++] = m%i;
m /= i;
}
sign = 1;
for (int j = 0; j < len/2; j++)
{
if (c[j] != c[len - j - 1])
sign = 0;
}
if (sign)
base[i] = 1; //在进制i时,是回文
}
int flag = 0; //没有回文数
for (int i = 2; i < 17; i++)
{
if (base[i] == 1)
flag = 1;
}
if (flag)
{
printf("Number %d is palindrom in basis", n);
for (int i = 2; i < 17; i++)
{
if(base[i]==1)
printf(" %d", i);
}
cout << endl;
}
else
printf("Number %d is not a palindrom\n", n);
}
return 0;
}
ZOJ 1078
最新推荐文章于 2023-03-30 12:34:20 发布