0
点赞
收藏
分享

微信扫一扫

进制回文数———进制转换,判回文


文章目录

  • ​​1 题目​​
  • ​​2 解析​​
  • ​​2.1 题意​​
  • ​​2.2 思路​​
  • ​​3 参考代码​​

1 题目

进制回文数
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
如果一个数字从左边读和从右边读一样,那么这个数字就是一个回文数。例如32123就是一个回文数;17在某种意义上也是一个回文数,因为它的二进制型式——10001——是一个回文数。
请你帮忙开发一个程序,判断一个数n在任意进制(2-16)下是否有回文数。

输入描述:
输入包含多组数据。
每组数据包括一个正整数n (1≤n<2^31)。

输出描述:
对应每组数据,如果n在2-16进制下存在回文数,则输出“Yes”;否则输出“No”。

输入例子:
32123
17

输出例子:
Yes
Yes

2 解析

2.1 题意

见题目

2.2 思路

进制转换,判回文

3 参考代码

#include 
#include

typedef long long ll;

int z[100];
int zNum = 0;

bool judge(int a[], int len){//判回文
for (int i = 0; i <= len/2; ++i) {
if(a[i] != a[len - 1 - i]) return false;
}
return true;
}

void deal(char s[], int Q, int z[], int &zNum){
int len = strlen(s);
ll x = 0;
for (int i = 0; i < len; ++i) {
x = x * 10 + s[i] - '0';
}

do{
z[zNum++] = x % Q;
x /= Q;
}while(x != 0);
}


int main(int argc, char const *argv[]){
char s[15];
while(scanf("%s", s) != EOF){
int i;
for (i = 2; i <= 16; ++i) {
memset(z, 0, sizeof(z));
zNum = 0;

deal(s, i, z, zNum);
if(judge(z, zNum) == true){
printf("Yes\n");
break;
}
}
if(i > 16){
printf("No\n");
}
}
return 0;
}

举报

相关推荐

0 条评论