【蓝桥杯】基础练习 十六进制转八进制
发布时间: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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |