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

来源:互联网 发布:淘宝免费其他流量来源 编辑:程序博客网 时间:2024/06/05 17:01

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


思路:

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


代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define MAXN 100000char 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]='\0';int i = 0;while(str_8[i]=='0')++i;//去除开头的0 for(;str_8[i];++i)printf("%c", str_8[i]);printf("\n");}return 0;}


0 0
原创粉丝点击