1361: 【基础】小丽找半个回文数(1386)
内存限制:16 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:2
解决:2
题目描述
小丽同学在编程中学到了回文数的概念,如果一个数正过来读和反过来读是同一个数,那么这个数就是回文数;比如:2、5、8、66、121、686、12321都是回文数,小丽发现,这样的数不算多。于是小丽有个想法,如果这个数不是回文数,但这个数在2进制或者16进制下是回文数,就算这个整数是半个回文数,比如417并不是回文,但417对应的16进制数是1A1是回文数,因此417算半个回文数。
请你编程帮助小丽找符合条件的半个回文数。
请你编程帮助小丽找符合条件的半个回文数。
输入
第一行是一个整数n(10<=n<=100)
第二行是n个整数(这些整数都是0~999999999之间的整数)
第二行是n个整数(这些整数都是0~999999999之间的整数)
输出
所有符合条件的半个回文数,每行一个。
样例输入 复制
5
121 417 27 100 21
样例输出 复制
417
27
21
提示
#include<bits/stdc++.h> using namespace std; /* 如果这个数在10进制下不是回文数 但这个数在1进制或者16进制下是回文数 */ /* 判断整数n在d进制下是否是回文 除d对d取余数,将余数存入数组,判断数组是否是回文 */ bool huiwen(int n,int d){ bool r=true; //假设是回文 int a[1000]={0}; //初始化为0,存n转d进制后的每一位 int k=0; while(n!=0){ a[k]=n%d; k++; n=n/d; } //判断回文:循环数组长度一半,判断对称位置是否有不等 for(int i=0;i<k/2;i++){ if(a[i]!=a[k-i-1]){ r=false; break; } } return r; } int main(){ int a[110],n,i; cin>>n; //遍历每个数,判断是否是半个回文 for(i=0;i<n;i++){ cin>>a[i]; } for(i=0;i<n;i++){ if(huiwen(a[i],10)==false&&(huiwen(a[i],2)==true||huiwen(a[i],16)==true)){ cout<<a[i]<<endl; } } return 0; }