首页 > 其他分享 >利用顺序栈实现十进制转其他进制

利用顺序栈实现十进制转其他进制

时间:2024-04-27 14:01:29浏览次数:18  
标签:SeqStack 进制 Manager 顺序 printf remainder 十进制

利用顺序栈实现十进制转其他进制

十进制转其他进制(如二进制、八进制、十六进制等)是一个常见的计算任务。以下是转换方法:

例如十进制转二进制

方法:整数部分不断除以2,直到商为0;小数部分不断乘以2,直到结果的小数部分为0。然后将得到的商或结果中的整数部分按照从下到上的顺序排列,即可得到转换后的二进制数。

示例:将十进制数 23 转换为二进制数。

23 ÷ 2 = 11 余 1
11 ÷ 2 = 5 余 1
5 ÷ 2 = 2 余 1
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1

将余数从下到上排列:10111,即 23 的二进制表示为 10111。

而我们知道顺序栈是一种利用顺序存储结构实现的栈。栈是一种特殊的线性数据结构,它遵循后进先出(LIFO,Last In First Out)的原则,即最后入栈的元素总是最先出栈,所以我们可以把余数进行压栈,读取时就只需要出栈,我们可以利用栈的特性,可以轻松的完成程序的进制转换。

代码如下

/*******************************************************************
*
*	函数名称:	  SeqStack_Dec2Otherbase
*	函数功能:   利用顺序栈实现十进制转其他进制
* 	函数参数:
*  			@a :SeqStack_t *Manager  定义的顺序栈
*  			@b :unsigned int Data    十进制数
*  			@b :int system           想要转换的进制数(2,8,16)

*   返回结果:   
* 	注意事项:   None
* 	函数作者:  [email protected]
*	创建日期:   2024/04/27
*	修改历史:
*	函数版本:	V1.0
* *****************************************************************/
void SeqStack_Dec2Otherbase(SeqStack_t *Manager,unsigned int Data,int system)   
{
	int remainder; //用于存储求余之后的余数


	//1.循环输入的进制数取余 
	do
	{
		remainder = Data % system;

		 //分析余数的范围 0~9  10~15 -->A~F
		if (remainder < 10)
		{
		 	SeqStack_Push(Manager,remainder+'0');
		}
		else
		{
			SeqStack_Push(Manager,remainder+'A'-10);
		}

		Data /= system;

	}while(Data);

	//2.把顺序栈中的元素依次出栈
	if(system==16)//由于16进制数比较特殊需要在前面加0x开头才能辨识
	{
			printf("0x");
		while( !SeqStack_IsEmpty(Manager) )
		{	
			printf("%c", SeqStack_Pop(Manager) );
		}
		printf("\n");
	}
	else
	{
		while( !SeqStack_IsEmpty(Manager) )
		{	
			printf("%c", SeqStack_Pop(Manager) );
		}
		printf("\n");
	}
	
}

如果该函数接口代码有什么问题,请将问题发至网易邮箱 [email protected],作者将及时改正,欢迎与各位老爷交流讨论。

麻烦三连加关注!!!!

比心

标签:SeqStack,进制,Manager,顺序,printf,remainder,十进制
From: https://www.cnblogs.com/zkbklink/p/18161977

相关文章

  • js调整div顺序
    js调整div顺序并保留div原有事件等<divclass="my_tabs"><divclass="el-tabs__nav-scroll"><divclass="el-tabs__nav"><divclass="el-tabs__itemis-active">AAAA</div><d......
  • 顺序栈十进制转十六进制,还有键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串
    设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。*@brief :十进制转十六进制*@param :@Segstackt*Manager:地址* @unsignedintData:转换的值*@re......
  • 循环顺序队以及链队
    数据结构线性结构--队链队相关接口程序设计/******************************************************************************filename:2024-04-26_ListQueue.c*author:[email protected]*date:2024-04-26*function:实现链队的接......
  • 顺序栈
    顺序栈/***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况......
  • 一道关于顺序栈的笔试题:判断一个包含'('和')'的字符串是否有效
    若有一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的左括号。思路图:参考代码:boolSeq......
  • 利用栈序列实现进制转换(D->H)
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......
  • 顺序栈
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......
  • 顺序循环队列的接口设计
    /***********************************************************************************************************该程序实现循环队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以循环队列中元素*的数据类型为DataType_t,用户可以根据实际情况......
  • gdb 根据c语言二进制文件进程号查看内部多线程任务
    C语言二进制文件a编译时添加了-g(gdb调试),但是gdba这种方式有时不容易复现一些场景。这时可以先正常启动a,然后根据a的进程号启动gdb调试。#1.找到程序进程号psaux|grepa#2.使用GDB附加到该进程sudogdb-p[PID]#3.使用infothreads命令来列出......
  • 练习题----顺序栈算法
    题目:​ 输入一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的左括号。题目分析:​ 该......