题目见zoj 1078
主要是判断一个整数在基数为2-16之间的某个数字时是否为回文,我是直接该整数转换成对应基数的表示的逆序列,并计算出该表示下的值,判断是否等于这个整数值,如果相等,那么就是回文,如果不相等就不是。
/* zoj 1078 Palindrom Numbers */
#include <stdio.h>
#define MAX 30
int isPalindrom(int base, int decNum);
int main(void)
{
int i,count;
int n,baseStr[MAX];
while(scanf("%d", &n) == 1 && n != 0)
{
count = 0;
for(i = 2; i <= 16; i++)
if(isPalindrom(i, n))
baseStr[count++] = i;
if(count == 0)
printf("Number %d is not a palindrom\n", n);
else
{
printf("Number %d is palindrom in basis",n);
for(i = 0; i < count; i++)
printf(" %d",baseStr[i]);
printf("\n");
}
}
return 0;
}
int isPalindrom(int base, int decNum)
{
int revBaseStr[MAX];
int i,count;
int temp = decNum;
for(count = 0; temp > 0; temp /= base)
revBaseStr[count++] = temp%base;
for(temp = 0, i = 0; i < count; i++)
temp = temp * base + revBaseStr[i];
if(temp == decNum)
return 1;
else
return 0;
}
本文详细介绍了如何通过将任意整数转换为不同基数下的表示并判断其是否为回文数的算法实现过程。通过具体代码示例阐述了从十进制到2-16进制的转换及回文数的判断逻辑。
377

被折叠的 条评论
为什么被折叠?



