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