C语言实现常见进制转换的示例代码

2023-05-14 17:05:33 示例 转换 常见

前言

生活中最常见的进制是十进制,而有一类编程题会要求将十进制转换为其他进制,本篇博客将主要讲述C语言中常见的几类进制转换问题。

一、十进制数转换为二进制数、八进制数

方法:举例将十进制数100转换为二进制数,就是将100与2相除,得到商以及余数,再将商与2不断相除,最终除到商为0。按顺序记录下余数,再将余数逆序输出,即为二进制的结果。八进制同理,商不断与8相除,最终除到商为0,按顺序记录下余数,再将余数逆序输出,即八进制的结果。此方法同样可以推广到要转换成二到九的任何一种进制。

图形如下:

代码如下:

#include <stdio.h>
int main()
{
    int x, n;
    scanf("%d %d", &x, &n);//x是要转换的十进制数,n为要转换成的进制
    int arr[100] = { 0 };//创建一个足够大的数组来存放余数
    int i = 0,j = 0;
    while (x)
    {
        arr[i++] = x % n;//存放余数,i最后的值正好是余数的个数
        x /= n;
    }
    for (j = i - 1; j >= 0; j--)
    {
        printf("%d", arr[j]);//余数倒序输出
    }
    printf("\n");
    return 0;
}

二、十进制转换为十六进制

将十进制转换为十六进制同样需要用到将商不断除16以及逆序输出等方法,但由于十六进制中会出现A\B\C\D\E\F等字符,所以还需要将取得的余数做进一步转换。代码如下:

#include <stdio.h>
int main()
{
    int x;
    scanf("%d", &x);
    char arr[100] = { 0 };//因为十六进制中会出现A\B\C\D\E\F等字符,所以保存余数的数组类型应定义为char
    int i = 0, j = 0;
    while (x)
    {
        arr[i++] = x % 16;
        x /= 16;
    }
    for (j = 0; j < i; j++)
    {
        //将取出的余数转换为对应的字符
        switch (arr[j])
        {
        case 10:arr[j] = 'A'; break;
        case 11:arr[j] = 'B'; break;
        case 12:arr[j] = 'C'; break;
        case 13:arr[j] = 'D'; break;
        case 14:arr[j] = 'E'; break;
        case 15:arr[j] = 'F'; break;
        default:arr[j] += 48;
        }
    }
    for (j = i - 1; j >= 0; j--)
    {
        printf("%c", arr[j]);//逆序打印
    }
    printf("\n");
    return 0;
}

三、二进制数、八进制数转换为十进制数

方法:需要将输入的数的每一位取出,再与这个位上的权重相乘,最后相加得到结果。

代码如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int n = 0, sum = 0, i = 0, x = 0;
    scanf("%d %d", &x, &n);//x为输入的二进制或八进制的数,n为进制。
    while (x)
    {
        sum += (x%10)*pow(n, i++);//x%10将x的每一位取出,再与这个位上的权重相乘。
        x /= 10;
    }
    printf("%d\n", sum);
    return 0;
}

四、十六进制数转换为十进制数

十六进制中含A\B\C\D\E\F等字符,所以在输入的时候可以将其看成输入一个字符串,需要先将每位上的字符转换为对应的数字与本位上的权重相乘,再相加得到最后的值。

代码如下:

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    char arr1[100] = { 0 };
    scanf("%s", arr1);
    int len = strlen(arr1);
    int i = 0,  sum = 0;
    for (i = 0; i<len; i++)
    {
        int temp = 0;
        switch (arr1[i])
        {
        case 'A':temp = 10; break;
        case 'B':temp = 11; break;
        case 'C':temp = 12; break;
        case 'D':temp = 13; break;
        case 'E':temp = 14; break;
        case 'F':temp = 15; break;
        default:temp = arr1[i] - '0'; break;
        //将各个位上的字符转换为对应的数字
        }
        sum += temp * pow(16, len-i-1);//各个位上的权重相乘再相加
    }
    printf("%d\n", sum);
    return 0;
}

到此这篇关于C语言实现常见进制转换的示例代码的文章就介绍到这了,更多相关C语言进制转换内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关文章