题意简述
:输入若干个整数,0作为结束。对于输入的整数n,问其几进制为回文数?
问题分析
:
这是一个有关进制处理的问题,都是套路。
程序中,封装了一个函数ispalindrom()用于将整数转换为指定进制的字符串,同时判断是否为回文数。使用数组ans[]作为标志,其元素个数需要多一个,是否为回文数的标志放在ans[0]中。
- #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。(因为形式中每个数必须<进制数base,所以取余)
- val /= base; //循环n次,则此行得到val中有多少个base的n次方。
- //显然,这里得到的t数组表示的形式是反过来的。
- }
- 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;
- }
学到的点:
①十进制数怎么转换成不同进制的数(形式上)。
②判断回文(较简单)。