PAT A1019 General Palindromic Number (20) [回⽂数 进制转换]

题目链接

题目链接

题目

给定一个十进制数和基数,判断对应进制数是否回文数,并打印
1 0是回文数
2 题目中没有标明大于10的进制中字母如何处理,试错发现,并不能将两位数字转化为字母,而是使用两位数字,并且在判断回文和打印时,这个两位数字都看做一个整体

解题思路

因为要用两位数字表示基数大于10的进制中大于10的数字,并将这种两位数看做一个整体处理,所以必须使用整型数组,不可使用字符串拼接
1 进制转换
2 判断回文

易错点

该题目必须使用整型数组,不能使用字符串,因为16进制中不适用字母,而是使用x%p后的两位数字,并且这个两位数字在判断回文和打印时,都是两位为一个整体打印的

Code

Code 01

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
/*
    判断任意进制的数是否是回文数

    注:该题目必须使用整型数组,不能使用字符串,因为16进制中不适用字母,而是使用x%p后的两位数字,
        并且这个两位数字在判断回文和打印时,都是两位为一个整体打印的 

*/
int ans[100],num;
// 1 判断是否回文
bool isP() {
    for(int i=0; i<num; i++) {
        if(i>=num-1-i)break;
        if(ans[i]!=ans[num-1-i]) {
            return false;
        }
    }
    return true;
}
// 2 十进制转换为任意进制
void pt(int x, int p) {
    int temp;
    do {
        temp = x%p;
        x/=p;
        ans[num++]=temp;
    } while(x!=0);
}
int main() {
    //1 输入
    int n,p;
    scanf("%d%d",&n,&p);
    pt(n,p);
    printf("%s\n",isP()?"Yes":"No");
    for(int i=num-1; i>=0; i--) {
        printf("%d",ans[i]);
        if(i!=0) printf(" ");
    }
    return 0;
}

Code 02

#include <iostream>
#include <string>
using namespace std;
/*

请查看错误版本比对,错误在:a%b后可能>9,但并不转换为字母,而是用模的结果两位数字表示
解决办法:
1 将每次取模后的数字保存在int数组中
*/
int main(int argc, char *argv[]) {
    int a,b;
    cin>>a>>b;
    int arr[40], index = 0;
    while(a != 0) {
        arr[index++] = a % b;
        a = a / b;
    }
    int p=0,q=index-1;
    while(p<q) {
        if(arr[p]!=arr[q])break;
        else {
            p++;
            q--;
        }
    }
    if(p<q)cout<<"No"<<endl;
    else cout<<"Yes"<<endl;
    for(int i=index-1; i>=0; i--) {
        cout<<arr[i];
        if(i!=0)cout<<" ";
    }
    return 0;
}

原文链接: https://www.cnblogs.com/houzm/p/13335049.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    PAT A1019 General Palindromic Number (20) [回⽂数 进制转换]

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/368009

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午6:10
下一篇 2023年3月2日 下午6:11

相关推荐