加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【蓝桥杯】基础练习 十六进制转八进制

发布时间:2020-12-14 03:41:53 所属栏目:大数据 来源:网络整理
导读:题目链接:http://lx.lanqiao.org/problem.page?gpid=T51 思路: 将16进制转成2进制,再转成8进制。 代码: #include iostream#include cstdio#include cstdlib#include cstringusing namespace std;#define MAXN 100000char str[MAXN+10];//16进制存储数组

题目链接:http://lx.lanqiao.org/problem.page?gpid=T51


思路:

将16进制转成2进制,再转成8进制。


代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define MAXN 100000
char str[MAXN+10];	//16进制存储数组 
int str_2[4*MAXN+10]; 	//2进制存储数组 
char str_8[2*MAXN+10];  //8进制存储数组 

int main(){
	int i,j;
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%s",str);
		int len = strlen(str);
		for(i=len-1,j=0; str[i]; --i){	//将16进制转成2进制 
			int n;
			if(str[i]>='0'&&str[i]<='9')	n = str[i] - '0';
			else n = str[i] - 'A' + 10;
			
			do{
				str_2[j++] = n&1;
				n = n>>1; 
			}while(j%4!=0);
		}
		
		len = j;	//将2进制转换为8进制 
		int num;
		j = 0;
		if(len%3 == 2){
			str_8[j++] = str_2[len-1]*2+str_2[len-2]+'0';
			len -= 2;
		}
		else if(len%3 == 1){
			str_8[j++] = str_2[len-1] + '0';
			len -= 1;
		}
		for(i = len-1; i>=0; i-=3,j++){
			str_8[j] = str_2[i]*4+str_2[i-1]*2+str_2[i-2]+'0';
		}
		str_8[j]='';
		int i = 0;
		while(str_8[i]=='0')	++i;	//去除开头的0 
		for(;str_8[i];++i)
			printf("%c",str_8[i]);
		printf("n");
	}
	return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读