二进制数与十进制之间的转换以及使用一个函数实现任意进制之间的转换

 其他进制转为十进制都可以实现,只需要将函数中的10和2换掉你需要的就行

#include <stdio.h>
#include <math.h>

// 1. 二进制转换为十进制
int twoConvertTen(long long n,long long size)
{

    int result = 0;                     /* 结果数 */
    int remainder;                      /* 余数 */

    // 也可以使用while(n != 0){} 代替for循环
    // 此种方法在二进制位数很多时,不适用
    for(int i = 0; i < size; i++)
    {
        remainder = n % 10;             /* 求出每一位的数值是1还是0 */
        n /= 10;
        result += remainder*pow(2,i);
    }

    return result;
}

// 2. 十进制转换为二进制
long long tenConvertTwe(int n)
{

    int i = 1;
    int result = 0;                     /* 结果数 */
    int remainder;                      /* 余数 */

    while (n != 0) {
        remainder = n % 2;
        n /= 2;
        result += remainder * i;
        i *= 10;                        /* 从个位->十位->百位->...   */
    }

    return result;
}

int main(){

    // 1. 二进制转换为十进制
    long long n = 1111;         /* n是二进制数 */
    long long size = 4;         /* size是二进制位数 */

    printf("二进制数 %lld 转换为十进制为: %d\n",n,twoConvertTen(n,size));

    // 2. 十进制转换为二进制
    int a;

    printf("输入一个十进制数: ");
    scanf("%d",&a);

    printf("十进制数 %d 转换为二进制数为: %lld",a,tenConvertTwe(a));

    return 0;
}

运行结果:

下面的方法结合前辈的思路编写的。

任意进制之间都可以进行转换,只需要一个函数就能解决。

#include <stdio.h>
#include <math.h>

/*
任意进制转换:
a: 原进制下的数
b: 原进制的基
c: 目标进制的基
result: 转换后的结果
*/

long long conversion(int a,int b,int c)
{
    int result = 0,i = 0;

    while (a != 0) {
        result += (a % c) * pow(b,i);
        i = i + 1;
        a /= c;
    }

    return result;
}

int main(){

    // 1. 二进制转换为十进制
    long long n;

    printf("输入一个二进制数: ");
    scanf("%lld",&n);

    printf("二进制数 %lld 转换为十进制为: %lld\n",n,conversion(n,2,10));

    printf("\n");

    // 2. 十进制转换为二进制
    int m;

    printf("输入一个十进制数: ");
    scanf("%d",&m);

    printf("十进制数 %d 转换为二进制数为: %lld\n",m,conversion(m,10,2));

    printf("\n");

    // 3. 八进制转为二进制,需要调用两次函数
    // 第一次由八进制转为十进制
    // 第二次由十进制转为二进制
    // 其他转换形式以此类推


    return 0;
}


猜你喜欢

转载自blog.csdn.net/m0_49456900/article/details/124151916