十进制转十六进制 (笔试题)

设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。

思路:
进栈->用循环将十进制数对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");
}

posted @ 2024-04-25 13:43  Dazz_24  阅读(12)  评论(0编辑  收藏  举报