C语言十进制转换成n进制(2 <= n <= 36)


/** @功能说明:字符转换
  * @参数:    num  整数转换成字符型
  * @返回值:  字符
  */
static uint8_t convertToChar(uint8_t num)
{
    if(num < 10)
        return '0' + num;
    else if(num < 36)
        return 'A' + num - 10;
    else
        return '$';
}

/** @功能说明:十进制整数转换成n进制
  * @参数:    data_10   十进制整数数据
  * @参数:    n         需要转换的进制  n必须小于37
  * @返回值:  无
  */
void DecimalTonBase(uint32_t data_10, uint8_t n)
{
    int8_t   i = 0;
    uint8_t  data[100] = {0};

    while(data_10 >= n)
    {
        data[i++] = convertToChar(data_10 % n); //求余并判断余数
        data_10 = data_10 / n;                //求商
    }
    data[i] = convertToChar(data_10);//判断最后的商


    while(i >= 0)//输出
    {
        printf("%c", data[i--]);
    }
}

测试程序

#include <stdio.h>
#include <stdint.h>


/** @功能说明:字符转换
  * @参数:    num  整数转换成字符型
  * @返回值:  字符
  */
static uint8_t convertToChar(uint8_t num)
{
    if(num < 10)
        return '0' + num;
    else if(num < 36)
        return 'A' + num - 10;
    else
        return '$';
}

/** @功能说明:十进制整数转换成n进制
  * @参数:    data_10   十进制整数数据
  * @参数:    n         需要转换的进制  n必须小于37
  * @返回值:  无
  */
void DecimalTonBase(uint32_t data_10, uint8_t n)
{
    int8_t   i = 0;
    uint8_t  data[100] = {0};

    while(data_10 >= n)
    {
        data[i++] = convertToChar(data_10 % n); //求余并判断余数
        data_10 = data_10 / n;                //求商
    }
    data[i] = convertToChar(data_10);//判断最后的商


    while(i >= 0)//输出
    {
        printf("%c", data[i--]);
    }
}



int main()
{
    uint32_t num = 0;
    int32_t n = 0;
    printf("Input\n");
    scanf("%d %d",&num, &n);
    DecimalTonBase(num, n);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归算法

/** @功能说明:十进制整数转换成n进制
  * @参数:    data_10   十进制整数数据
  * @参数:    n         需要转换的进制  n必须小于37
  * @返回值:  无
  */
void DecimalTonBase(uint32_t data_10, uint8_t n)
{
    if(data_10)//该数不是0
    {
        DecimalTonBase(data_10 / n, n);//除
        printf("%c", convertToChar(data_10 % n));//返回后输出求模之后的数值
    }
    else//该数是0
    {
        return;//是0则返回
    }
}

测试代码

#include <stdio.h>
#include <stdint.h>



/** @功能说明:字符转换
  * @参数:    num  整数转换成字符型
  * @返回值:  字符
  */
static uint8_t convertToChar(uint8_t num)
{
    if(num < 10)
        return '0' + num;
    else if(num < 36)
        return 'A' + num - 10;
    else
        return '$';
}


/** @功能说明:十进制整数转换成n进制
  * @参数:    data_10   十进制整数数据
  * @参数:    n         需要转换的进制  n必须小于37
  * @返回值:  无
  */
void DecimalTonBase(uint32_t data_10, uint8_t n)
{
    if(data_10)//该数不是0
    {
        DecimalTonBase(data_10 / n, n);//除
        printf("%c", convertToChar(data_10 % n));//返回后输出求模之后的数值
    }
    else//该数是0
    {
        return;//是0则返回
    }
}



int main()
{
    uint32_t data = 0;
    uint32_t n = 0;
    scanf("%d %d", &data, &n);
    DecimalTonBase(data, n);
    printf("\n");
}

在这里插入图片描述
在这里插入图片描述运用字符串常量则运算更加简单

#include <stdio.h>
#include <stdint.h>



/** @功能说明:十进制整数转换成n进制
  * @参数:    data_10   十进制整数数据
  * @参数:    n         需要转换的进制  n必须小于17
  * @返回值:  无
  */
void DecimalTonBase(uint32_t data_10, uint8_t n)
{
    if(data_10)//该数不是0
    {
        DecimalTonBase(data_10 / n, n);//除
        printf("%c", "0123456789ABCDEF"[data_10 % n]);//返回后输出求模之后的数值
    }
    else//该数是0
    {
        return;//是0则返回
    }
}



int main()
{
    uint32_t data = 0;
    uint32_t n = 0;
    scanf("%d %d", &data, &n);
    DecimalTonBase(data, n);
    printf("\n");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值