标签:
Regionals 2001 >> Latin America - South America
题链接:UVALive2389 ZOJ1078 Palindrom Numbers。入门训练题,用C语言编写程序。
题意简述:输入若干个整数,0作为结束。对于输入的整数n,问其几进制为回文数?
这是一个有关进制处理的问题,都是套路。程序中,封装了一个函数ispalindrom()用于将整数转换为指定进制的字符串,同时判断是否为回文数。使用数组ans[]作为标志,其元素个数需要多一个,是否为回文数的标志放在ans[0]中。
AC的C语言程序如下:
/* UVALive2389 ZOJ1078 Palindrom Numbers */
#include <stdio.h>
#include <memory.h>
#define MAXN1 20000
#define MAXN2 16
char t[MAXN1];
int ispalindrom(int val, int base)
{
int count=0, start, end;
while(val) {
t[count++] = val % base;
val /= base;
}
start = 0;
end = count - 1;
count = 1;
while(start < end) {
if(t[start] != t[end]) {
count = 0;
break;
}
start++;
end--;
}
return count;
}
int main(void)
{
int n, i;
int ans[MAXN2+1];
while(scanf("%d", &n) != EOF && n != 0) {
memset(ans, 0, sizeof(ans));
for(i=2; i<=MAXN2; i++)
if(ispalindrom(n, i)) {
ans[0] = 1;
ans[i] = 1;
}
if(ans[0]) {
printf("Number %d is palindrom in basis", n);
for(i=2; i<=MAXN2; i++)
if(ans[i])
printf(" %d", i);
printf("\n");
} else
printf("Number %d is not palindrom\n", n);
}
return 0;
}UVALive2389 ZOJ1078 Palindrom Numbers
标签:
原文地址:http://blog.csdn.net/tigerisland45/article/details/52099977