#include <stdio.h>
#include <string.h>
int digit[120000];
int con[15];
int len;
void trans(int num, int base)
{
int i = 0;
for ( ; ; ) {
digit[i] = num % base;
if (!(num /= base))
break;
i++;
}
len = i;
}
int main()
{
int num;
int i, j, k, l;
while (scanf("%d", &num) == 1 && num) {
l = 0;
memset(con, 0, sizeof(int) * 15);
for (i = 2; i <= 16; i++) {
memset(digit, 0, sizeof(int) * 120000);
trans(num, i);
for (j = 0, k = len; j <= len && k >= 0; j++, k--) {
if (digit[j] != digit[k]) {
break;
}
}
if (j == len+1 && k == -1) {
con[l++] = i;
}
}
if (l != 0) {
printf("Number %d is palindrom in basis ", num);
for (i = 0; i < l; i++) {
printf("%d", con[i]);
if (i != l - 1) {
printf(" ");
}
}
printf("\n");
}
else
printf("Number %d is not a palindrom\n", num);
}
return 0;
}
题目要求输入一个十进制数,寻找该数在不同进制中的回文数。先将十进制数转换成不同的进制数(倒序)存入数组,比较数组中的元素是否对称,如果对称则将该进制存入一个临时数组,最后观察数组是否为空并输出该数组即可。
ZOJ1078-Palindrom Numbers
最新推荐文章于 2023-02-21 14:30:55 发布