#include <bits/stdc++.h>
using namespace std;
string t[16] =
{"0000","0001","0010","0011","0100","0101","0110","0111",
"1000","1001","1010","1011","1100","1101","1110","1111"};
int main(){
//s:存放 16 进制,r:存放 2 进制
string s, r;
cin >> s;
//s[i]转换为 0~15 之间的整数,然后再求对应的 4 位 2 进制
int x;
for (int i = 0; i < s.size(); i++){
//如果是 0~9
if (isdigit(s[i])){
x = s[i] - '0';
} else{
x = s[i] - 'A' + 10;
}
r = r + t[x];
}
//删除前导 0
//当 r[0]是 '0',则删除
while (r[0] == '0'){
r.erase(0, 1);
}
if (r == ""){
cout << 0;
}else{
cout << r;
}
}
1386:【基础】小丽找半个回文数?
#include <bits/stdc++.h>
using namespace std;
/*
如果这个数在 10 进制下不是回文数
但这个数在 2 进制或者 16 进制下是回文数
*/
/*
判断整数 n 在 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];
}
//遍历每个数,判断是否是半个回文
cout << endl;//将输入数据与输出数据隔行显示
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;
}
}
}