題目描述
我們把從左往右和從右往左念起來相同的數字叫做回文數。例如,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 }