东方博宜 OJ 1301-1400

1306:【基础】十六进制转二进制

#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;
		} 
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值