又见回文数
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
冷淡的回文数被水了,各种被水,然后他很生气,然后...
一个数从左边读和从右边读一样,就说这个数是回文数。如121就是一个回文数。
这个简单了点,咱们这样规定:给定一个十进制数,你判断一下在二~十六进制下她是否是回文数,你能征服她吗?
如17用十进制表示它不是回文数,但是用二进制表示(10001),它是一个回文数。
-
输入
- 输入包含一些整数。每个数n(0<n<50000)用十进制表示,每个数一行。输入0结束。 输出
- 程序输出信息包括:“number i is palindrom in basis ”,i是给定的数,接着输出进制,在该进制下i是回文数。如果在二~十六进制下都不是回文,输出信息包括:“number i is not a palindrom”。 样例输入
-
17 19 0
样例输出
-
number 17 is palindrom in basis 2 4 16 number 19 is not a palindrom
-
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int a[20]; char str[20]; int main(){ int i,j,k,t,n,m,s,f,h; while(scanf("%d",&n),n){ k=0; for(i=2;i<=16;i++){ s=0; m=n; while(m){ t=m%i; if(t>=10) str[s++]=t+'a'; else str[s++]=t+'0'; m/=i; } f=1; for(j=0;j<=s-1-j;j++) if(str[j]!=str[s-1-j]){ f=0; break; } if(f) a[k++]=i; } if(k==0) printf("number %d is not a palindrom\n",n); else{ printf("number %d is palindrom in basis",n); for(i=0;i<k;i++) printf(" %d",a[i]); printf("\n"); } } return 0; }