题目描述
如果一个数字从左边读和从右边读一样,那么这个数字就是一个回文数。例如32123就是一个回文数;17在某种意义上也是一个回文数,因为它的二进制型式——10001——是一个回文数。
请你帮忙开发一个程序,判断一个数n在任意进制(2-16)下是否有回文数。
输入描述:
输入包含多组数据。
每组数据包括一个正整数n (1≤n<2^31)。
输出描述:
对应每组数据,如果n在2-16进制下存在回文数,则输出“Yes”;否则输出“No”。
输入例子:
32123
17
输出例子:
Yes
Yes
代码:
#include <stdio.h>
bool huiwen(char a[], int n){
int i, j;
i = 0; j = n - 1;
while (i < j){
if (a[i] != a[j])
return false;
i++;
j--;
}
return true;
}
int main(){
char buffer[1001];
int a;
int temp;
int counter = 0;
int i;
while (scanf("%d", &a) != EOF){
int b = a;
for ( i = 2; i <= 16; i++){
b = a;
counter = 0;
while (b){
temp = b % i;
b /= i;
if (temp >= 10){
buffer[counter] = temp - 10 + 'A';
}
else{
buffer[counter] = temp + '0';
}
counter++;
}
//printf("i = %d, counter = %d\n", i, counter);
if (huiwen(buffer, counter)){
break;
}
}//end for
if (i >= 17){
printf("No\n");
}
else{
printf("Yes\n");
}
}
}