蓝桥杯C/C++ 基础练习 十进制转十六进制 C语言

题目:

在这里插入图片描述
思路:求余、求商,倒序排放,switch语句
在写好字符转换函数dtoc()的前提下,想到,给定值可以以16为界分为两部分,因此需要判断num < 16? 如果小于16,可直接打印结果;大于等于16,则需要求余求商,此时判断条件变为:商是否大于等于16(另一种说法:是否大于15),如果大于15,则需要一直求商,直至商小于16,在此期间,将所有的商(转换后的商)依次放到定义的字符数组。最后将商转换后放到数组中。循环打印数组中字符。

代码:
运行环境:Code::Blocks 20.03

#include <stdio.h>

//该函数时为了将1-15转换为字符;
char  dtoc(int a)
{
    char i;
    switch(a)
    {
        case 0: i = '0';
        break;
        case 1: i = '1';
        break;
        case 2: i = '2';
        break;
        case 3: i = '3';
        break;
        case 4: i = '4';
        break;
        case 5: i = '5';
        break;
        case 6: i = '6';
        break;
        case 7: i = '7';
        break;
        case 8: i = '8';
        break;
        case 9: i = '9';
        break;
        case 10: i = 'A';
        break;
        case 11: i = 'B';
        break;
        case 12: i = 'C';
        break;
        case 13: i = 'D';
        break;
        case 14: i = 'E';
        break;
        default: i = 'F';
        break;
    }

    return i;
}

int main(void)
{
    int i, j;
    unsigned long int num;
    char hs[10];

    scanf("%d", &num);

    if(num <16) //判断num是否大于等于16,如果小于16,可直接打印出结果;
    {
        hs[0] = dtoc(num);
        printf("%c", hs[0]);

        return 0;

    }

    while(num > 15) //如果给定值大于15,则求余,并放到数组hs[]中,且求出商;循环计算,直到商小于等于15
        hs[i] = dtoc(num%16);
        num = num / 16;
        i++;
    }

    hs[i] = dtoc(num);//将最后的商放到数组hs[]中;

    for(j = i; j >= 0; j--) //循环打印hs[]中的元素,注意:hs[]中元素为逆序排放
    {
        printf("%c", hs[j]);
    }

    return 0;
}
                              /*菜鸟一枚,请多指教*/
                                        End
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值