蓝桥杯C/C++ 基础练习 十六进制转八进制 C语言

article/2025/9/23 9:11:42

题目:

在这里插入图片描述

分析:

思路:先将十六进制转为二进制,然后将二进制转为八进制

遇到的问题如下:

1、输入格式和输出格式,决定了需要用数组存储十六进制数、二进制数以及八进制数。由于有多个字符串(多位十六进制数),故采用二维数组。
2、十六进制数由数字和字母“A/B/C/D/E/F”组成,在将十六进制转为二进制时,需要先判断十六进制数每一位是数字还是字母,并转化为十进制,再转为二进制(按位转化),并存储到二进制数组中。
3、需要注意是从后往前展开,举例:输入十六进制数:2A(0010 1010),存放到二进制数组的顺序相反:0101 0100,在将二进制转化为八进制的时候,仍然是倒序放入,输出时则从后往前,得出的即为正序。
4、二进制转八进制的过程:把二进制数组中每三位计算出来,依次到八进制数组中。对应的公式:num = 2^0 * A + 2^1 * B +2^2 * C。上述的A、B、C分别为二进制数组字符串中的每一位,即0或1。
5、那么如何判断每三位一组且循环相加呢?部分代码如下:
在这里插入图片描述

注意,此处利用每一位相乘的权值来判断是否计算了三位,第三位权值为4,所以用cnt==4来判断。而j==m-1是防止剩余不足三位。求和放到八进制数组中(倒序),由于为倒序,打印时也应该为倒序打印;
6、尽管用的是二维数组,但是由于在整个大循环中,用法和一维数组一样。需要注意的是:定义数组时,每个字符串长度要满足题目条件,每个十六进制数长度不超过100000。

代码如下:
运行环境:Code::Block 20.03

#include <stdio.h>
#include <string.h>//    基础练习 十六进制转八进制int main(void)
{int n, i, j, k;scanf("%d", &n);char h[n][100000];char b[n][400000];char e[n][400000];for(i = 0; i < n; i++){scanf("%s",h[i]);}for(i = 0; i < n; i++)// 第一层循环:将每个字符串都化为二进制数,存放到b[i][m]中,m用来记录存放了对应字符串的长度{int m = 0;for(j = strlen(h[i]) - 1; j >= 0; j--){int num;if(h[i][j] >= '0' && h[i][j] <= '9'){num = h[i][j] - '0';}else{num = h[i][j] - 'A' + 10;}for(k = 0; k < 4; k++){b[i][m++] = num % 2 + '0';num /= 2;}b[i][m] = '\0';}//        //测试是否成功转化为二进制(从后往前展开),并存放到b[i][m]中
//        for(j = 0; j < m; j++)
//        {
//            printf("%c", b[i][j]);
//        }
//        printf("\n");//将b[i]中的每个字符串每三位计算出来,存放到e[i][l]数组中int x = 0, cnt = 1, l = 0;for(j = 0; j < m; j++){if(cnt == 4 || j == m - 1){x = cnt * ( b[i][j] - '0') + x;e[i][l] = x + '0';           //由于定义e[][]为字符数组,所以需要+'0'字符转化一下l++;cnt = 1;x = 0;}else{x = cnt * ( b[i][j] - '0') + x;cnt *= 2;}}j = l - 1;while(j >= 0 && e[i][j] == '0')        //题目规定不能有前导0,e[][]数组中是倒序存入,故从后往前判断是否为0{j--;}if(j < 0)                              //如果全为0则输出为0{printf("0");}for(; j >= 0; j--)                     //否则循环输出(输出为正序){printf("%c", e[i][j]);}printf("\n");}return 0;
}
                                //菜鸟一枚,请多指正!End

http://chatgpt.dhexx.cn/article/yOJDqgv0.shtml

相关文章

蓝桥杯——十六进制转八进制(Java解法)

这道题其实挺难的&#xff0c;之前做过一次&#xff0c;用的十六进制转化为十进制&#xff0c;然后用十进制再转化为八进制&#xff0c;代码很简单&#xff0c;用的jdk上自带的进制转换进行换算。 import java.util.Scanner; /** * author 作者 E-mail: WYJ 1627407425qq.com…

蓝桥杯-十六进制转八进制(Java)

蓝桥杯-十六进制转八进制(Java) 最近在练习算法题&#xff0c;打算应付一下下学期的蓝桥杯&#xff0c;写写博客记录一下我的学习过程&#xff0c;对算法感兴趣的朋友可以给小编点点关注(重要的事情加上强调标志&#xff0c;o(&#xffe3;︶&#xffe3;)o)&#xff0c;这个假…

蓝桥杯C语言 十六进制转八进制

十六进制转八进制 思路分析&#xff1a; 39十六进制先转换为4位二进制&#xff0c;3为0011&#xff0c;9为1001&#xff0c;所以39的二进制为00111001,又把二进制转化为3位八进制&#xff0c;从右边开始数&#xff0c;001为1&#xff0c;111为7&#xff0c;所以39的八进制为71。…

十六进制转换八进制

问题描述 给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n &#xff08;1<n<10&#xff09;。   接下来n行&#xff0c;每行一个由09、大写字母AF组成的字符串&#xff0c;表示要转换的十六进制正整数&#xff0…

蓝桥杯练习:C语言十六进制转八进制

这题对我来说是有点难度的,最后做出来,但是提交显示 运行错误,看不出哪里出错了. 我的思路: 将十六进制转化为二进制,二进制最后转化为八进制. 首先将十六进制存入数组,然后将数组中每一位转化为对应的十进制数,之后将再将每一位十进制数转化为二进制数,将这些二进制数以每三…

C语言十六进制转八进制

思路&#xff1a;将十六进制先转为十进制再转为八进制 十六进制转十进制:与二进制转十进制类似。对十六进制每个数从左往右依次乘16的0,1,2,......并相加得到相应的十进制。 比如&#xff1a;对123ABC&#xff0c;1216&#xff08;0&#xff09;1116&#xff08;1&#xff09…

XPC U盘启动盘的制作

XPC U盘启动盘的制作 对于XPC目标机的启动&#xff0c;我们可以通过网络、硬盘或者 U盘启动目标机。这里介绍一下通过U盘的气动&#xff0c;因为这个相对而言比较简单。 选择一个4G以下的U盘&#xff0c;最好为2G选择一台XP系统的电脑&#xff08;最好为工控机&#xff0c;必…

XPC调试记录 :TwinCAT生成XML配置文件

XPC调试记录&#xff1a;生成XML配置文件20210316 1.连接目标控制器 硬件准备&#xff1a;用一根网线将配置有EtherCAT的电脑和EK1100&#xff08;BECOHOFF总线模块&#xff09;网线插槽X2(OUT)相连。&#xff08;正常初始化配置时对应指示灯闪烁&#xff09; &#xff08;1&a…

iOS 冰与火之歌 - 利用 XPC 过 App 沙盒

蒸米是阿里巴巴的移动安全工程师&#xff0c;香港中文大学博士&#xff0c;也是发现并命名了XcodeGhost的人。这次他所在的iOS安全小组发现了影响最新版iOS 9.3的0day漏洞。此漏洞杀伤力巨大&#xff0c;在非越狱手机上一个app应用可以利用这个漏洞做到读取或者修改沙盒外其他a…

xPC信号采集和分析(1)

背景介绍 在我的上篇文章用虚拟机在一台电脑上实现xPC实时仿真&#xff0c;进行xPC实时仿真的过程中&#xff0c;需要将仿真数据进行记录以便后续分析处理。xPC目标的信号采集过程是通过实时内核来完成的。实时应用程序的信号数据存储在目标机的RAM中&#xff0c;xPC目标程序支…

建模simulink - 手把手教你搭建xpc平台

概述 xpc半实物仿真目标是个基于RTW对低端实时仿真和开发平台,可将计算机或者工控机转变为一个实时系统,不需要第三方操作系统对支持,在计算机上配置输入输入出设备就能和外部交换信息,进行硬件再换仿真和测控系统开发。 目前mathworks已经放弃来xpc target这个说法,而改用…

xPC信号采集和分析(2)

背景介绍 上一篇文章xPC信号采集和分析&#xff08;1&#xff09;里面&#xff0c;解决了自己在使用第二种方法&#xff1a;信号记录模式对xPC数据进行记录过程中的一些问题。 然而很多情况下&#xff0c;我们需要采用第三种信号跟踪模式对实时任务中的数据进行实时传输并可视…

matlab中xpcapi库的调用,关于MATLAB中xpc实时控制平台搭建的心得

Xpc target主机—目标机通讯平台的搭建 一、用u盘制作XPC的目标启动盘 U盘启动盘制作的关键是找对dos系统软件包和相应的读写软件,我也是找了很久而不得要领。开始时,我是下载了一个网上的dos系统软件包,然后用ultriso写入u盘中,然而并不成功,试了几次后,才找到合适的软件…

建模simulink - xpc自定义模块

概述 在实际项目设计中,使用simulink提供的基本模块很难实现的时候,此时就需要一种用户可以自定义的方式,定做自己的模块。 在这种情况下,Matlab的s函数应运而生,S-函数是系统函数(System Function)的简称,又称S-function,支持用户使用C语言、C++、Matlab等语言编写自己…

simulink模块,提供xpctarget下驱动源码

simulink模块&#xff0c;提供xpctarget下驱动源码 :77999632700099250风中的蜗牛

建模simulink - xpc自定义模块设置

概述 simulink建模不同于代码编程,整个项目以模块/模型为单元展开,在之前的文章中,小编已经介绍过如何自定义模块,以及设置参数等信息,不懂的小伙伴可以先移步看看以前的文章,正因为simulink的这种特性,所以此时模块/模型的展示信息就显得尤为重要。 注意 ★环境:matla…

建模simulink - xpc自定义模块库

概述 打开simulink Library Browser,可以看到,simulink官方只为我们提供一些基本模型库,而在实际开发过程中,这些模型库往往需要我们进行二次封装后才能在项目中使用。这时,我们可以创建专属自己的自定义库,把项目中写好的一些模型块放在库中进行统一管理。这样当遇到类似…

在 macOS 中如何使用 XPC 实现跨进程通讯?

以防丢失&#xff0c;转载自&#xff1a; http://davidleee.com/2020/07/20/ipc-for-macOS/ 如侵权&#xff0c;联系删除 最近需要在 Electron 项目上引入一个比较吃性能的大头功能&#xff0c;因为已经用 Objective-C 实现过一套稳定且性能也可接受的带 UI 方案了&#xff0c;…

matlab xpc 环境pci板卡驱动编写,XPC环境下PCI板卡驱动

当Simulink 与S-function 相互作用时&#xff0c;Simulink 所调用的第一个程序是mdlInitializeSizes&#xff0c;随后调用的是其它S-function 函数(所有的函数名均以mdl 开头)。 在仿真结束时&#xff0c;Simulink 调用mdlTerminate函数。 2.3.2预处理 该范例以以下的定义开头&…

进程间通信之XPC

From&#xff1a;https://blog.csdn.net/heikefangxian23/article/details/51071840 关于 XPC XPC 是 OS X 下的一种 IPC (进程间通信) 技术, 它实现了权限隔离, 使得 App Sandbox 更加完备. 首先&#xff0c;XPC 更多关注的是实现功能某种的方式&#xff0c;通常采用其他方…