进制转换相关习题

文章讲述了编程中的几个挑战:判断整数是否为半个回文数(在二进制或16进制下是回文),识别二进制转为10进制后的素数,以及不同进制之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小丽找半个回文数

小丽同学在编程中学到了回文数的概念,如果一个数正过来读和反过来读是同一个数,那么这个数就是回文数;比如:2、5、8、66、121、686、12321都是回文数,小丽发现,这样的数不算多。于是小丽有个想法,如果这个数不是回文数,但这个数在2进制或者16进制下是回文数,就算这个整数是半个回文数,比如417并不是回文,但417对应的16进制数是1A1是回文数,因此417算半个回文数。
请你编程帮助小丽找符合条件的半个回文数。

第一行是一个整数n(10<=n<=100)
第二行是n个整数(这些整数都是0~999999999之间的整数)

所有符合条件的半个回文数,每行一个。

样例输入
5
121 417 27 100 21
样例输出
417
27
21
代码:
#include<bits/stdc++.h>
using namespace std;
string p(int a,int b)
{
    string s;
    int c=0;
    while(a)
    {
        if(a%b<10)s=char(a%b+'0')+s;
        else s=char(a%b-10+'A')+s;
        a/=b;
    }
    return s;
}
int n,x;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    	cin>>x;
    	string s1=p(x,2),s2=p(x,16);
    	int w=0,s=0;
    	for(int i=0,j=s1.size()-1;i<=j;i++,j--)
    		if(s1[i]!=s1[j])w=1;
    	for(int i=0,j=s2.size()-1;i<=j;i++,j--)
    		if(s2[i]!=s2[j])s=1;
    	if(w=&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值