十六进制转八进制 + (蓝桥杯)输出超长八进制数

1.常规十六进制转八进制

#include<iostream>
using namespace std;
int main()
{
	int n, m;
	cin >> hex >> n; //十六进制输入
	cout << dec << n << endl; //十进制输出
	cout << oct << n << endl; //八进制输出
	return 0;
}

2.蓝桥杯练习系统遇到的,输入是超长16进制数,已AC
思路是先转为2进制再转为8进制

#include<iostream>
#include<vector>

using namespace std;
vector<int> vec2;


void Two(char c)
{
	int x = (int)c - 48;
	int i = 0;
	int y[4] = {0, 0, 0, 0};
	if(x > 10){
		if(c == 'A') x = 10;
		if(c == 'B') x = 11;
		if(c == 'C') x = 12;
		if(c == 'D') x = 13;
		if(c == 'E') x = 14;
		if(c == 'F') x = 15;
		//这里也可以直接写成x = x - 55; 
	}
	
	while(x){
		y[i] = x % 2;
		x /= 2;
		i++;
	}
	
	for(int j = 3; j >= 0; j--){
		vec2.push_back(y[j]); //倒序放入vec2中才是正确的二进制
	}
}

void ba() //每三位二进制可以转为一个八进制数 
{
	int len = vec2.size();
	int i = 0;
	while(vec2[i] == 0){
		i++;
	}
	
	int k = (len - i) % 3;
	if(k == 0) k = 3;
	i = i - (3 - k); 
	
	int oct = 0;
	for(; i < len - 2; i += 3){
		oct = vec2[i] * 4 + vec2[i + 1] * 2 + vec2[i + 2];
		printf("%d", oct);
	}
	printf("\n");
}


int main()
{
	long long n;
	cin >> n;
	string s;
	
	for(int i = 0; i < n; i++){
		cin >> s;
		int len = s.size();
		for(int k = 0; k < 3; k++){
			vec2.push_back(0);
		}
		for(int j = 0; j < len; j++){
			//char c = s[j];
			Two(s[j]); //从最高位开始每一位16进制转为4位二进制 
		}
		ba();
		vec2.clear();
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值