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

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 <cstdio>
#include <cstring>

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;
}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页