C语言——不同进制之间的转换

发布时间:2024年01月14日

?

大家在做编程题的过程中一定遇到过类似,进制之间的转换的问题,无论是二进制、八进制、还是我们最熟悉的十进制,不同的进制存在着不同的存储方式,那么不同的存储方式之间又会有着相互转换,那么今天我们来讲一讲代码该如何实现进制之间的转换。

1、十进制转任意进制

由于我们在生活中大多使用的都是十进制,所以我们也是对十进制最了解的,那么我们先来从十进制转换任意进制说起:

在数学中我们如果要求几进制的时候,最常用的方法就是使用短除法

我们以十进制转二进制为例:

总结:

?1、除以进制数

2、保留他的余数

3、保留它的商

4、余数的从后往前依次排开就是521的二进制序列

那么我们如果想要做到十进制转化为任意进制也是这个流程(先补充一个知识点如果,要转换成16进制或者只要是比10大的数时,就用A、B、C、......来代替,例如:11就是A,12就是B

#include <stdio.h>

void convertToBase(int num, int base) {
    // 定义一个数组存放转换后的结果
    char result[100];
    int index = 0;

    // 当输入的数大于0时进行转换
    while (num > 0) {
        int remainder = num % base;//余数
        if (remainder < 10) {
            result[index++] = remainder + '0';
        } else {
            result[index++] = remainder - 10 + 'A';
        }
        num = num / base;//更新num的值,将每次商作为下一次的被除数
    }

    //逆置打印,输出转换后的结果
    printf("转换后的结果为: ");
    for (int i = index - 1; i >= 0; i--) {
        printf("%c", result[i]);
    }
    printf("\n");
}

int main() {
    int num, base;
    printf("请输入一个十进制数: ");
    scanf("%d", &num);
    printf("请输入要转换的进制数(2-16): ");
    scanf("%d", &base);

    convertToBase(num, base);

    return 0;
}

?这样我们就实现了,十进制转换任意进制的问题🎖?🎖?🎖?

2、任意进制转换为十进制

?我们学习了十进制转换任意进制再看这个简直就是易如反掌

我们给出一个简单的1011二进制的序列,如果我们把它转换为10进制就只需要把他的每一位取出来依次乘二进制的2从零开始一直到(位数-1)再相加就是10进制的数:

那么,我们如果是任意的进制也是按照这个思路走,然后我们实现以下代码?:

#include <stdio.h>
#include <string.h>

toten(char* str, int ne) {
    ans = 0, arg = 1;//arg初始为1,就可以保证在第一次循环的时候×进制的0次方是1
    int len = strlen(str);
    for (int i = len - 1; i >= 0; i--) {
        if (str[i] <= '9')
            ans += (str[i] - '0') * arg;
        else
            ans += (str[i] - 'A' + 10) * arg;
        arg *= ne;
    }
    return ans;
}

int main() {
    char num[20];
    int base;

    printf("请输入一个数字:");
    scanf("%s", num);
    printf("请输入数字的进制:");
    scanf("%d", &base);

    decimal = toten(num, base);

    printf("转换为十进制的结果为:%d\n", decimal);

    return 0;
}

这个代码就可以实现任意进制转换为十进制了,那么当我们需要任意进制转换为任意进制的时候,我们可以借助我们熟悉的10进制来作为中间值,两个代码就可以实现了,当然也有其他的方法,期待大家告诉我,我的分享就到这里了!🫖🫖🫖?

文章来源:https://blog.csdn.net/2301_77125473/article/details/135585018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。