第二次博客作业进制转换

一、运行截图

先将其转换至10进制,再转换到所需的进制

当你要输入一个二进制数的时候,你输入的却不是一个二进制数,那么这个时候应该要输出一个错误提示,告诉你你的这个操作是错误的

二进制转16进制

二、函数介绍

通过将一个进制数先转换成十进制数,再将其转换成所需进制,通过10进制容易转换为其他进制来精简代码。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int TenNum(char a[], int B);              //将输入的数字转换成10进制数
void Numchange(int m, int B);            //将转换好了的10进制数转换为所需进制数
int TenNum(char a[], int B)
{
    int len, i, num;
    int sum = 0;
    len = strlen(a);                    //求得字符串长度
    for (i = 0; i < len; i++)
    {
        if (a[i] >= '0' && a[i] <= '9')
            num = a[i] - '0';
        else if (a[i] >= 'A' && a[i] <= 'F')
            num = a[i] - 'A' + 10;
        sum = sum * B + num;
    }
    return sum;
}
void Numchange(int m, int B)
{
    int n;
    if (m)
    {
        Numchange(m / B, B);
        n = m % B;
        if (n < 10)
            printf("%d", n);           //小于10直接输出
        else
            printf("%c", n + 55);      //大于10转换成字符输出
    }
}
    return 0;
}

三、main函数

int main()
{
    int B;
    char a[20];
    printf("请输入待转换数的进制:");
    scanf("%d", &B);
    if (B != 2 && B != 8 && B != 10 && B != 16) {
    printf("错误!") ;
            return 0;
    }
    printf("请输入待转换数:");
    getchar();
    gets(a);
                            //将输入的n进制数存放在数组a中
    int m = TenNum(a, B);             //将输入的数字转换成十进制数
    printf("请输入需要转成几进制数:");
    scanf("%d",&B);
    if (B != 2 && B != 8 && B != 10 && B != 16) {
        printf("错误!");
            return 0;
    }
    printf("输出的结果为:");
    Numchange(m, B);                 //将十进制数转换为所需进制数
    printf("\n");
    system("pause");
    return 0;
}

四、思维导图

五、问题解答

问题、如何使输入不合本程序规则的进制类型输出错误

    scanf("%d",&B);
    if (B != 2 && B != 8 && B != 10 && B != 16) {
        printf("错误!");
            return 0;
    }

如果输入/出的值不为2,8,10,16.就输出“错误!”。

六、代码互评(王毅大佬)

int main()
{
    int jzs, x;
    printf("输入'2'为二进制;输入'8'为八进制;输入'10'为十进制\n输入进制数;");
    //输入进制数
    scanf("%d", &jzs);
    printf("输入一个数:");
    //输入被转化的数
    scanf("%d", &x);
    //判断进制数
    if (jzs == 2) {
        twotoeightandten(x);
    }
    else if (jzs == 8) {
        eighttotwoandten(x);
    }
    else if (jzs == 10) {
        tentotwoandeight(x);
    }
    return 0;
}

这个同学的代码思路非常清晰,转换的十分正确,有一些东西也是我没有想到的,非常值得我去学习。

七、小结

此次博客园题目让我清楚明白了自己的不足,通过对学长的求助才让我完成此次作业,先转换为十进制数,再转换为所需进制数是此次的收获。

猜你喜欢

转载自www.cnblogs.com/hao123456-/p/11832277.html