C语言实现任意进制间的转换

不问归期 提交于 2020-02-05 16:01:42

题目描述:
编写代码实现将输入的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);
        }
    }
}

测试案例
在这里插入图片描述

感谢师傅来访,技术不精,请勿吐槽,如有问题请留言。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!