/** @功能说明:字符转换
* @参数: 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");
}