PAT 1019 General Palindromic Number

题目描述

英文

在这里插入图片描述

中文大意

老生常谈,回文串。
输入NbNb进制下是否是回文数?
如果是,则输出Yes,否则输出No
并在下一行(无论它是不是)都输出 Nb进制下的数

样例

在这里插入图片描述

思路分析

首先把N转换为b进制,然后传入判断是否是回文串
判断是否回文串使用 双指针
需要注意的点:
N的范围是 0<N<109 没有超出int的表示范围,所以没有必要使用long 类型来表示
所以数组的范围以2进制来计算,也只需30位即可表示全部
-2147483648~2147483647[-231 ~ 231-1]
109:最高为10位数字

code

#include <iostream>
using namespace std;


// 把N转换为b进制, 并存入nums数组,cnt负责计数
void to_b_hex(int N, int b, int* nums, int &cnt) {
    // 特情
    if (N == 0) {
        nums[cnt++] = 0;
        return;
    }
    // 27 2                 4 2
    // 11011 N = 0 return   001
    while (N) {
        nums[cnt++] = N % b;
        N /= b;
    }
}

// 判断是否是回文数 cnt是nums中有效数字的个数
bool is_palindromic(int nums[], int cnt) {
    for (int i = 0, j = cnt-1;i < j;i++, j--) {
        if (nums[i] != nums[j])
            return false;
    }
    return true;
}

int nums[30];
int main() {
    int N, b, cnt = 0;
    scanf("%d %d", &N, &b);
    to_b_hex(N, b, nums, cnt);
    if (is_palindromic(nums, cnt)) {
        printf("Yes\n");
    } else {
        printf("No\n");
    };
    for (int i = cnt-1;i > 0;i--) {
        printf("%d ", nums[i]);
    }
    printf("%d", nums[0]);

}

题目链接

1019 General Palindromic Number (20分)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值