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

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

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

例如十进制转二进制

方法:整数部分不断除以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
* 	函数作者:  m17872844806@163.com
*	创建日期:   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");
	}
	
}

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

麻烦三连加关注!!!!

比心

posted @ 2024-04-27 13:54  琨为玉也  阅读(217)  评论(0)    收藏  举报