题目描述:
编写代码实现将输入的n进制数转换为x进制,即实现任意进制数转换为另任意进制数。
思路:
C语言实现任意进制间的转换可以以十进制为基准,先将需要转换的数字转换成十进制然后再将其转换成目标进制数,这样就实现了任意进制间的转换。
引用函数:
int ChangeTen(int n, char str[]);
ChangeX(int n, int x);
首先将涉及大于十进制的转换的数挑出来,利用ASCALL码将字符转换成整型或将整型转换成字符
以取余的方式,将十进制数转换成其他进制数,再按照按权展开的方式,将其他进制数转换成十进制数
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ChangeTen(int n, char str[]);
void ChangeX(int n, int x);
int main()
{
char str[100]; //由于待转换数的进制未知,可能存在字母表达,所以用字符串储存
int n, x, s;
printf("输入待转换数及其进制:\n");
scanf("%s %d", str, &n);
s = ChangeTen(n, str);
printf("输入待转换进制:\n");
scanf("%d", &x);
printf("转换后为:\n");
ChangeX(s, x);
return 0;
}
int ChangeTen(int n, char str[]) //将n进制数转换成10进制数
{
int len = strlen(str), i, sum = 0, t = 1;
for (i = len - 1; i >= 0; i--)
{
if (str[i] > 'A') //当高于10进制时,会用‘A’及其后表达
{
sum += (str[i] - 55)*t;
}
else
{
sum += (str[i] - 48)*t;
}
t *= n;
}
return sum;
}
void ChangeX(int n, int x) //利用递归思想把10进制数转换为x进制
{
int a;
if(n)
{
ChangeX(n/x, x);
a = n%x;
if (a < 10)
{
printf("%d", a);
}
else
{
printf("%c", a+55);
}
}
}
测试案例
感谢师傅来访,技术不精,请勿吐槽,如有问题请留言。