回文数
题目描述
我们把从左往右和从右往左念起来相同的数字叫做回文数。例如,75457就是一个回文数。
当然某个数用某个进制表示不是回文数,但是用别的进制表示可能就是回文数。
例如,17是用十进制表示的数,显然它不是一个回文数,但是将17用二进制表示出来是10001,显然在二进制下它是一个回文数。
现在给你一个用十进制表示的数,请你判断它在2~16进制下是否是回文数。
当然某个数用某个进制表示不是回文数,但是用别的进制表示可能就是回文数。
例如,17是用十进制表示的数,显然它不是一个回文数,但是将17用二进制表示出来是10001,显然在二进制下它是一个回文数。
现在给你一个用十进制表示的数,请你判断它在2~16进制下是否是回文数。
输入
输入包含多组测试数据。每组输入一个用十进制表示的正整数n(0<n<50000),当n=0时,输入结束。
输出
对于每组输入,如果n在2~16进制中的某些进制表示下是回文数,则输出“Number i is palindrom in basis ”,在后面接着输出那些进制。其中i用n的值代替,后面输出的进制中,每两个数字之间空一个。
如果n在2~16进制的表示下都不为回文数,则输出“Number i is not a palindrom”,其中i用n的值代替。
如果n在2~16进制的表示下都不为回文数,则输出“Number i is not a palindrom”,其中i用n的值代替。
样例输入
17 19 0
样例输出
Number 17 is palindrom in basis 2 4 16 Number 19 is not a palindrom
1 #include <stdio.h> 2 3 4 int judge(int n,int i) 5 { 6 int a[50]; 7 int g,num=0; 8 while(n) 9 { 10 a[num++]=n%i; 11 n/=i; 12 } 13 int t=1; 14 for(g=0;g<num/2;g++) 15 { 16 if(a[g]!=a[num-1-g]) 17 { 18 t=0; 19 break; 20 } 21 } 22 return t; 23 } 24 25 int main() 26 { 27 int n; 28 while(scanf("%d",&n),n) 29 { 30 int a[20]={0}; 31 int i,t=0; 32 for(i=2;i<=16;i++) 33 { 34 if(judge(n,i)) 35 { 36 t=1; 37 a[i]=1; 38 } 39 } 40 if(t) 41 { 42 printf("Number %d is palindrom in basis",n); 43 for(i=2;i<=16;i++) 44 { 45 if(a[i]) printf(" %d",i); 46 } 47 printf("\n"); 48 } 49 else printf("Number %d is not a palindrom\n",n); 50 } 51 return 0; 52 }