十进制转十六进制 (笔试题)
设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。
思路:
进栈->用循环将十进制数对16取模,注意需要注意0-9和10-15的情况,分别先转换成其对应的ASCII码,再将其存入栈,然后将传进来的数除等于16,定义一个变量来存储这个结果,再重复这个步骤,对这个变量取模......循环的退出条件是变量除以16等于0
出栈->先打印十六进制的前导符,再用循环进行出栈,对出栈的数据进行打印,直到栈为空,退出循环,最后打印换行符。
/******************************************************
*
* name : SeqStack_Dec2Hex
* function : 利用顺序栈实现十进制转十六进制
* argument
* @Manager :顺序栈的地址
* @num :需要转换十进制数
*
* retval : void
* author : Dazz
* date : 2024/4/25
* note : None
*
* *******************************************************/
void SeqStack_Dec2Hex(SeqStack_t *Manager, unsigned int num)
{
// 用于存储求余之后的余数
int remainder = 0;
// 循环对非负整数进行求余 num % 16
do
{
remainder = num % 16;
// 分析余数的范围 0~9 10~15 --->A~F
if (remainder < 10)
{
SeqStack_Push(Manager, remainder + '0');
}
else
{
SeqStack_Push(Manager, remainder + 'A' - 10);
}
num /= 16;
} while (num != 0);
// 把顺序栈中的元素依次出栈
printf("0x");
while (!SeqStack_IsEmpty(Manager))
{
printf("%c", SeqStack_Pop(Manager));
}
printf("\n");
}