设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。
思路:
进栈->用循环将十进制数对16取模,将结果存进栈中,然后定义无符号整型变量,将该十进制数除以16得到的结果(int类型自动取整,舍弃小数位)赋值给该变量,重复上述循环,注意跳出循环的条件为得到新的变量对16取模的结果为他本身。为了方便出栈,在循环体内要定义一个计数器,记录进栈的次数
出栈->用循环将上述步骤进栈的数据出栈,循环的次数为进栈时所记录的计数器,注意当所出栈时数据大于10的情况要用字符输出的形式转换为字母
/******************************************************
*
* name : DecToHex
* function : 创建顺序表并对顺序栈进行初始化
* argument
* @Manager :顺序栈的地址
*
* retval : void
* author : Dazz
* date : 2024/4/25
* note : None
*
* *******************************************************/
void DecToHex(SeqStack_t *Manager, unsigned int num)
{
// 记录十进制数转换为十六进制数的位数,即需要进几次栈
int count = 0;
// 用循环把传进来的函数用短除法存进栈中
while (1)
{
// 把传进来的函数用短除法存进栈中(该函数已判断栈是否位满)
SeqStack_Push(Manager, num % 16);
count++;
// 退出循环条件
if (num == num % 16)
break;
num = num / 16;
}
//输入十六进制前导符
printf("0x");
//用循环对栈进行出栈,并输出出栈的数据
for (int temp; count > 0; count--)
{
// 对出栈的数据进行备份(该函数已判断栈是否为空)
temp = SeqStack_Pop(Manager);
if (temp < 10) //数据小于十的情况
printf("%d", temp);
else //数据大于十的情况,数据对数据进行转换
printf("%c", temp + 55);
if (1 == count)
printf("\n");
}
}
标签:十六进制,出栈,16,num,十进制,循环
From: https://www.cnblogs.com/Dazz24/p/18157532