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

article/2025/9/23 9:29:26

 

这题对我来说是有点难度的,最后做出来,但是提交显示 运行错误,看不出哪里出错了.

我的思路:

将十六进制转化为二进制,二进制最后转化为八进制.

首先将十六进制存入数组,然后将数组中每一位转化为对应的十进制数,之后将再将每一位十进制数转化为二进制数,将这些二进制数以每三位为一组,最后转化为八进制数

.转化成十进制时需要一个数组来存储十进制数,十进制转化为二进制时需要一个数组来存储二进制数.

我编写的程序借鉴了两篇文章,是在这两篇文章的基础上,结合了一下:

蓝桥杯C语言基础练习 十六进制转八进制_zhangge138的博客-CSDN博客_十六进制转八进制蓝桥杯https://blog.csdn.net/zhangge138/article/details/79297234

c语言二进制转换八进制_我是超人,但我不会飞的博客-CSDN博客_c语言二进制转八进制二进制转换为八进制把要转换的二进制数按照3位一组从右边往左边分组。不足3位的在左边补上0111001111001=001 110 001 111 001#include<stdio.h>#define MAX 1024 /*****************往左补0 n需要补0的个数*******************/int * Move(int *Elem,...https://blog.csdn.net/qq_39771637/article/details/85390565我写的程序:.

#include<stdio.h>
#include<string.h>
#define N 100002
#define M 400002int eighteenTrans(char ch)
{if(ch >= '0' && ch <= '9')ch -= 48;if(ch >= 'A' && ch <= 'F')ch -= 55;return ch;
}	//二进制转八进制 	
void binary_2_Octal(int B[],int len)					{int i,num;int j = 0;int sum[N];for(i=0;i<len;i+=3){sum[j] = B[i]*4 + B[i+1]*2 + B[i+2];j++;}num=0;for(i=0;i<j;i++)		//判断是否八进制数全为0 							num += sum[i];	if(!num){printf("%d",num);}else{i=0;while(!sum[i])		//去掉前导0 						i++;for(i;i<j;i++) printf("%d",sum[i]);}
}int B[M];
int B1[M];
char H[N];
int main()
{ 	int n,length,i,j,len,k;scanf("%d",&n);if(n<1||n>10)return 0;while(n){scanf("%s",H);						//从高位到低位存入,H[0]是高位			 if(H[0] == '0' || H[0] == '-') {	//保证输入是正整数,并且没有前导0			 continue;}else{n--;//ruirui add}len = 0;k = 0;length = strlen(H);j=length-1;for(j;j>=0;j--) {//将十六进制的每一位转换为十进制int num = eighteenTrans(H[j]);	//再转换为每三位为一组的二进制数				 int count = 3;for(count;count >= 0;count--)					  {//只能从低位向高位存储,并且可以记录他的长度 B[len] = num%2;								num /= 2;len++;}		}for(i=len-1;i>=0;i--) 			//将数组逆向存入B1[k]{B1[k]=B[i];k++;} /*-------------------补0-----------------------*/ if(k%3==0){binary_2_Octal(B1,k);}if(k%3==1){for(i=k+1;i>=2;i--){B1[i]=B1[i-2];}k += 2; for(i=0;i<2;i++)B1[i] = 0; binary_2_Octal(B1,k);}if(k%3==2){for(i=k;i>=1;i--)B1[i]=B1[i-1];k += 1;B1[0] = 0;	binary_2_Octal(B1,k);}printf("\n"); }return 0;
}
​

提交到蓝桥杯,显示运行错误,用蓝桥杯给的输入文件测试了一遍都对着呢,始终不知道是哪里出错了

大神在我的基础上,优化了一下:

#include<stdio.h>
#include<string.h>
#define N 100000// 十六进制转十进制 
int eighteen2Ten(char ch)
{if(ch >= '0' && ch <= '9')ch -= 48;if(ch >= 'A' && ch <= 'F')ch -= 55;return ch;
}		//二进制转八进制 
int two2Eight(int B[], int len)
{return B[0]*4 + B[1]*2 + B[2];
}char arr16[N];
int arr2[N];
int _arr2[N];int main()
{ 	int n, i, j;scanf("%d",&n);if(n<1||n>10)                    //或的关系 return 0;while(n) {scanf("%s", arr16);        //从高位到低位存入,arr16[0]是高位 // 防止输入0开头或负数 if(arr16[0] == '0' || arr16[0] == '-') {continue;}else{n--;}int len_2 = 0;for(j = strlen(arr16) - 1; j >= 0; j--) {int num = eighteen2Ten(arr16[j]);//16->10int count = 3;for(count; count >= 0; count--)//10->2{arr2[len_2] = num % 2;//只能从低位向高位存储,并且可以记录他的长度 num /= 2;len_2++;}		}
//		for(i = 0; i < len_2; i++)
//			printf("arr2[%d] = %d\n", i, arr2[i]);
//		for(i = len_2 - 1; i >= 0; i--)
//			printf("arr2[%d] = %d\n", i, arr2[i]);
//		printf("len_2 = %d\n", len_2);for(i = 0; i< len_2; i++)//把数组逆序存储 {_arr2[len_2 - i - 1] = arr2[i];
//			printf("_arr2[%d] = %d\n", i, _arr2[i]);} //2->8int len_mod = len_2 % 3;int k = 0;// 余1补2位  余2补1位 if(len_mod == 1){k = -2;} else if(len_mod == 2){k = -1;}int tmp = 0;for(i = k; i <len_2; i += 3){int n0 = i < 0 ? 0 : _arr2[i];int n1 = i+1 < 0 ? 0 : _arr2[i+1];int n2 = _arr2[i+2];int n[3] = {n0, n1, n2};
//			printf("i = %d, 取出3位二进制为: %d, %d, %d\n", i, n0, n1, n2);int x = two2Eight(n, 3);if(x == 0){							//去掉前导0	if(tmp == 0){tmp = 1;}else{printf("%d", x);}}else{printf("%d", x);}				}printf("\n");}return 0;
}

提交到蓝桥杯,显示运行超时,猜测有可能是 函数two2Eight 的问题。

已经在这道题上花了太多时间,以后有时间再继续研究。


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

相关文章

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;通常采用其他方…

MacOS XPC的使用入门

MacOS&#xff1a;10.14&#xff0c;Xcode&#xff1a;11.0 1、随意创建一个工程&#xff0c;可以是App project Xcode -> File -> New -> Project... -> macOS -> Application -> App -> click Next 填写Product Name(XPCDemo) -> 选择或者不选择Team…

关于 XPC

关于 XPC XPC 是 OS X 下的一种 IPC (进程间通信) 技术, 它实现了权限隔离, 使得 App Sandbox 更加完备. 首先&#xff0c;XPC 更多关注的是实现功能某种的方式&#xff0c;通常采用其他方式同样能够实现。并没有强调如果不使用 XPC&#xff0c;无法实现某些功能。 XPC 目的是提…

用虚拟机在一台电脑上实现xPC实时仿真

背景介绍 一般的xPC仿真需要2台电脑来分别实现目标机和宿主机&#xff0c;两者之间通过以太网或者串口实现通讯。Matlab的xPC Target提供了一个运行在目标机上的高度剪裁的实时操作内核&#xff0c;无需在目标机上面安装任何的操作系统&#xff0c;只需要包含实时内核的启动盘启…

使用XPC与X-Plane9进行通信

XPC(X-Plane Connect)是NASA开源的项目 XPC下载地址 XPC支持C,JAVA,PYTHON和MATLAB 博主使用的是XPC中matlab与X-Plane9进行通信&#xff0c;具体步骤如下 1.把 .XPlaneConnect-master/xpcPlugin 下的 XPlaneConnect 文件夹整体拷贝到游戏目录下 .X-Plane 9\Resources\plugi…

XPC论文总结

XPC: Architectural Support for Secure and Efficient Cross Process Call 论文总结 摘要 1.微内核有很多有趣的特性&#xff0c;例如安全性、容错、模块化、可定制性。 2.IPC是影响操作系统性能的主要因素。 3.IPC在例如Android Linux等单片内核中也发挥着重要作用&#xf…