#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAXCHAR 101 //最大允许字符串长度
//将字符转换成数字
int char_to_num(char ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
else
return ch - 'A' + 10;
}
//将数字转换成字符
char num_to_char(int num)
{
if (num >= 0 && num <= 9)
return (char)('0' + num - 0);
else
return (char)('A' + num - 10);
}
//其他数制转换成十进制
long source_to_decimal(char temp[], int source)
{
long decimal_num = 0; // 存储展开之后的和
int length;
int i;
for (i = 0; temp[i] != '\0'; i++);
length = i;
for (i = 0; i <= length - 1; i++) //累加
decimal_num = (decimal_num * source) + char_to_num(temp[i]);
return decimal_num;
}
//十进制转换成其他数制
int decimal_to_object(char temp[], long decimal_num, int object)
{
int i = 0;
while (decimal_num)
{
temp[i] = num_to_char(decimal_num % object); //求出余数并转换为字符
decimal_num = decimal_num / object; //用十进制数除以基数
i++;
}
temp[i] = '\0';
return i;
}
//逆序输出新数
void output(char temp[], int length)
{
int i;
for (i = length - 1; i >= 0; i--) //输出temp数组中的值
printf("%c", temp[i]);
printf("\n");
}
int main()
{
int source; //存储原数制
int object; //存储目标数制
int length; //存储转换成目标数制后字符数组的长度
long decimal_num; //存储转换成的十进制数
char temp[MAXCHAR]; //存储待转换的数值和转换后的数值
int flag = 1; //存储是否退出程序的标志
while (flag) //利用输出的flag值控制循环
{
printf("转换前的数是:");
scanf("%s", temp);
printf("转换前的数制是:");
scanf("%d", &source);
printf("转换后的数制是:");
scanf("%d", &object);
printf("转换后的数是:");
decimal_num = source_to_decimal(temp, source);
length = decimal_to_object(temp, decimal_num, object);
output(temp, length);
printf("继续请输入1,否则输入0:\n");
scanf("%d", &flag);
}
}
![](https://img2023.cnblogs.com/blog/3168003/202304/3168003-20230423171337185-1155322352.png)