找回密码
 立即注册
首页 业界区 科技 笔试题-十进制转十六进制

笔试题-十进制转十六进制

蒲善思 2025-7-9 18:07:03
题目

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

[code]/** * @name    :  Dec_to_Hex * @brief   :  使用顺序栈实现输入一个非负的十进制数,输出对应的十六进制数 * @param   :   *              @Data:输入的十进制数 * @retval  :  成功回true,失败返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */bool Dec_to_Hex(unsigned int Data){    int remainder=0;//用于存储求余后的余数    //创建一个顺序栈    SeqStack_t *manager=SeqStack_Create(100);    //十进制转十六进制,入栈    while(Data){        remainder=Data%16;        Data=Data/16;        SeqStack_Push(manager,remainder);    }    printf("0x");    int p;    int digit=manager->top+1;//计算需要补零的有效位数    //补齐前导0并加下划线,输出栈中数据    for(int i=0;ibottom){        perror("calloc memory for Stack is failed\n");        exit(-1);    }    manager->size=size;    manager->top=-1;    return manager;}/** * @name    :  SeqStack_IsFull * @brief   :  判断顺序栈是否已满 * @param   :   *              @manager:需要判断的顺序栈 * @retval  :  已满返回true,未满返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */bool SeqStack_IsFull(SeqStack_t *manager){    return (manager->top+1==manager->size)? true : false;}/** * @name    :  SeqStack_IsEmpty * @brief   :  判断顺序栈是否为空 * @param   :   *              @manager:需要判断的顺序栈 * @retval  :  为空返回true,不为空返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */bool SeqStack_IsEmpty(SeqStack_t *manager){    return (-1==manager->top)? true : false;}/** * @name    :  SeqStack_Push * @brief   :  入栈 * @param   :   *              @manager:需要操作的顺序栈 *              @Data:需要压入的元素 * @retval  :  已满返回true,未满返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */bool SeqStack_Push(SeqStack_t *manager,DataType_t Data){    //判断顺序栈是否已满    if ( SeqStack_IsFull(manager) ){        printf("Sequence Stack is Full\n");        return false;    }    //如果顺序栈有剩余空间,则把新元素插入顺序栈的栈顶,并更新管理结构体中最后栈顶的元素下标    manager->bottom[++manager->top]=Data;    return true;}/** * @name    :  SeqStack_Pop * @brief   :  出栈 * @param   :   *              @manager:需要操作的顺序栈 *              @out:接收弹出的值 * @retval  :  成功回true,失败返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */bool SeqStack_Pop(SeqStack_t *manager, DataType_t *out){       //判断顺序栈是否为空    if ( SeqStack_IsEmpty(manager) ){        printf("Sequence Stack is empty\n");        return false;    }    //删除一个元素,栈顶元素下标-1    *out=manager->bottom[manager->top--];    return true;}/** * @name    :  SeqStack_print * @brief   :  遍历顺序栈 * @param   :   *              @manager:需要操作的顺序栈 * @retval  :  成功回true,失败返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */void SeqStack_print(SeqStack_t *manager){       //判断顺序栈是否为空    if ( SeqStack_IsEmpty(manager) ){        printf("Sequence Stack is empty\n");        return;    }    //如果顺序栈不为空,则打印顺序栈的元素    for (int i=0;itop+1;i++){        printf("Element[%d]=%d\n",i,manager->bottom);    }    printf("\n");}/** * @name    :  Dec_to_Hex * @brief   :  使用顺序栈实现输入一个非负的十进制数,输出对应的十六进制数 * @param   :   *              @Data:输入的十进制数 * @retval  :  成功回true,失败返回false * @date    :  2025/7/5 * @version :  1.0 * @note    :  None */bool Dec_to_Hex(unsigned int Data){    int remainder=0;//用于存储求余后的余数    //创建一个顺序栈    SeqStack_t *manager=SeqStack_Create(100);    //十进制转十六进制,入栈    while(Data){        remainder=Data%16;        Data=Data/16;        SeqStack_Push(manager,remainder);    }    printf("0x");    int p;    int digit=manager->top+1;//计算需要补零的有效位数    //补齐前导0并加下划线,输出栈中数据    for(int i=0;i
您需要登录后才可以回帖 登录 | 立即注册