利用顺序栈实现十进制转其他进制
十进制转其他进制(如二进制、八进制、十六进制等)是一个常见的计算任务。以下是转换方法:
例如十进制转二进制
方法:整数部分不断除以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