user-0 提问: 蓝桥杯十六进制转八进制简易思路

回复:
user: user-0
content: 引用 17 楼 寻开心的回复:牺牲空间换时间，打表可以大幅度提高效率 3个16进制 = 4个八进制  这对很长的数据来说，很有优势 3个16进制才多少位啊， 12bits， 最大值也不过4096吧，这点内存开销不算什么 嗯，学到了。

user: user-1
content: 牺牲空间换时间，打表可以大幅度提高效率 3个16进制 = 4个八进制  这对很长的数据来说，很有优势 3个16进制才多少位啊， 12bits， 最大值也不过4096吧，这点内存开销不算什么

user: user-2
content: 引用 15 楼 zhoujun233 的回复:有没有什么好的教学视频，，打表我不会，c函数库一个都不会标准库这个靠时间积累 没什么特别好的做法  做题多了接触多了自然知道了 这里不知道 sprintf/sscanf 问题不大 无非是手写 int转4位八进制字符串 / 3位十六进制字符串转int  打表这个记一下用两下就懂了 算是一种基础数据结构 后面学数据结构 算法之类的课程会接触到

user: user-0
content: 有没有什么好的教学视频，，打表我不会，c函数库一个都不会

user: user-0
content: 引用 12 楼 lin5161678的回复:[quote=引用 10 楼 lin5161678 的回复:] #include <stdio.h> int main(int argc, char *argv[]) { 	//打表  	char table[0x1000][10]; 	for(int i=0; i<0x1000; ++i) 		sprintf(table[i], "%04o", i); 	//输入 预留偏移以便对齐	 	char strSrc[1024] = "000"; 	scanf("%s", strSrc + 3); 	//输出 计算对齐  	int nlen = strlen(strSrc + 3); 	for(char* pstrSrc = strSrc + nlen % 3; *pstrSrc; pstrSrc+=3) 	{ 		int nTmp = 0; 		sscanf(pstrSrc, "%3x", &nTmp); 		printf("%s", table[nTmp]); 	}  	puts("");  	return 0; } 没怎么雕琢 最开始会有多余0的现象 小问题 没做处理 理解代码 不要生搬硬套[/quote] 这个我刚刚查了下，百度，的确这样更简单。c函数库没有学，不会用

user: user-3
content: 引用 5 楼 zhoujun233 的回复：[quote=引用 3 楼 初学小菜的回复:]他这么写不是很麻烦嘛。。。。 这个思路不就是利用二进制完成转化嘛，四位换成3位。。 emmm，那要怎么写?第二次些博客了。有些题目看起来简单，可实践起来比较难，这题要求十六进制位数很多位。我之前写了个用单纯用整型加数学方法的代码。可是提交上去蓝桥杯就显示运行错误。求教教我如何写好一篇好博客[/quote]字符串存就行，管它多少位呢，有二进制的思想，打表➕判就简单了

user: user-2
content: 引用 10 楼 lin5161678 的回复:#include <stdio.h> int main(int argc, char *argv[]) { 	//打表  	char table[0x1000][10]; 	for(int i=0; i<0x1000; ++i) 		sprintf(table[i], "%04o", i); 	//输入 预留偏移以便对齐	 	char strSrc[1024] = "000"; 	scanf("%s", strSrc + 3); 	//输出 计算对齐  	int nlen = strlen(strSrc + 3); 	for(char* pstrSrc = strSrc + nlen % 3; *pstrSrc; pstrSrc+=3) 	{ 		int nTmp = 0; 		sscanf(pstrSrc, "%3x", &nTmp); 		printf("%s", table[nTmp]); 	}  	puts("");  	return 0; } 没怎么雕琢 最开始会有多余0的现象 小问题 没做处理 理解代码 不要生搬硬套

user: user-2
content: 引用 9 楼 zhoujun233 的回复:而且你的码表是不是有些多呀，3位十六进制有多少数呀！多少位重要吗? 加声明数组在内 3行代码的事

user: user-2
content: #include <stdio.h> int main(int argc, char *argv[]) { 	//打表  	char table[0x1000][10]; 	for(int i=0; i<0x1000; ++i) 		sprintf(table[i], "%04o", i); 	//输入 预留偏移以便对齐	 	char strSrc[1024] = "000"; 	scanf("%s", strSrc + 3); 	//输出 计算对齐  	int nlen = strlen(strSrc + 3); 	for(char* pstrSrc = strSrc + nlen % 3; *pstrSrc; pstrSrc+=3) 	{ 		int nTmp = 0; 		sscanf(pstrSrc, "%3x", &nTmp); 		printf("%s", table[nTmp]); 	}  	puts("");  	return 0; }

user: user-0
content: 引用 7 楼 lin5161678的回复:挺简单的题目 怎么你实现这么复杂 1位十六进制对应4位二进制 1位八进制对应3位二进制 3位十六进制对应 12位二进制  12位二进制对应 4位八进制 整理一下 3位十六进制对应4位八进制 一个循环打表 处理的时候 做好对齐分割 扫一圈完事 而且你的码表是不是有些多呀，3位十六进制有多少数呀！

user: user-0
content: 引用 7 楼 lin5161678的回复:挺简单的题目 怎么你实现这么复杂 1位十六进制对应4位二进制 1位八进制对应3位二进制 3位十六进制对应 12位二进制  12位二进制对应 4位八进制 整理一下 3位十六进制对应4位八进制 一个循环打表 处理的时候 做好对齐分割 扫一圈完事 可是你输入的一定是3倍数的十六进制嘛？

user: user-2
content: 挺简单的题目 怎么你实现这么复杂 1位十六进制对应4位二进制 1位八进制对应3位二进制 3位十六进制对应 12位二进制  12位二进制对应 4位八进制 整理一下 3位十六进制对应4位八进制 一个循环打表 处理的时候 做好对齐分割 扫一圈完事

user: user-0
content: 引用 4 楼 千梦一生的回复:我理解中16进制转8进制应该很简单啊。 我开始看到这题也是这样想的，可题目要求这个十六进制的位数很大，不能用数值运算，只能用字符串一位一位的运算

user: user-0
content: 引用 3 楼 初学小菜的回复:他这么写不是很麻烦嘛。。。。 这个思路不就是利用二进制完成转化嘛，四位换成3位。。 emmm，那要怎么写?第二次些博客了。有些题目看起来简单，可实践起来比较难，这题要求十六进制位数很多位。我之前写了个用单纯用整型加数学方法的代码。可是提交上去蓝桥杯就显示运行错误。求教教我如何写好一篇好博客

user: user-4
content: 我理解中16进制转8进制应该很简单啊。

user: user-3
content: 他这么写不是很麻烦嘛。。。。 这个思路不就是利用二进制完成转化嘛，四位换成3位。。

user: user-0
content: 引用 1 楼 user-5的回复:前段时间有人发帖问过这个问题 毕竟是蓝桥杯题目，，看的人还是比较多的

user: user-5
content: 前段时间有人发帖问过这个问题