您的位置:首页 > 其它

ZOJ1078-Palindrom Numbers

2016-01-23 12:11 351 查看
#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;
}
题目要求输入一个十进制数,寻找该数在不同进制中的回文数。先将十进制数转换成不同的进制数(倒序)存入数组,比较数组中的元素是否对称,如果对称则将该进制存入一个临时数组,最后观察数组是否为空并输出该数组即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: