如果一个数字从左边读和从右边读一样,那么这个数字就是一个回文数。例如32123就是一个回文数;17在某种意义上也是一个回文数,因为它的二进制型式——10001——是一个回文数。
请你帮忙开发一个程序,判断一个数n在任意进制(2-16)下是否有回文数。
输入包含多组数据。
每组数据包括一个正整数n (1≤n<2^31)。
对应每组数据,如果n在2-16进制下存在回文数,则输出“Yes”;否则输出“No”。
输入示例
32123
17
输出示例
Yes
Yes
#include<stdio.h>
//题目要求是有回文联就输出Yes
int huiwen(char *arr,int num){
int i=0;
int j=num-1;
while(i<j){
if(arr[i]!=arr[j])
return 0;
j--;
i++;
}
return 1;
}
int main(){
int num;
char arr[1000];
int i;
int a;
while(~scanf("%d",&a)){
int b=a;
num = 0;
for(i=2;i<=16;i++){//从2进制到16进制一一判断,每个进制都存入数组内,一个进制判断结束,数组清除,重新从0开始添加元素
b=a;
num=0;
while(b){
int t=b%i;//余数超过10一律变大写字母
b /= i;
if(t>=10){
arr[num]=t-10+'A';
}else{
arr[num]=t+'0';
}
num++;
}
if(huiwen(arr,num))
break;
}
if(i>=17){
printf("No\n");
}else{
printf("Yes\n");
}
}
return 0;
}