一、运行截图
先将其转换至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;
}
这个同学的代码思路非常清晰,转换的十分正确,有一些东西也是我没有想到的,非常值得我去学习。
七、小结
此次博客园题目让我清楚明白了自己的不足,通过对学长的求助才让我完成此次作业,先转换为十进制数,再转换为所需进制数是此次的收获。