函数+进制转换器
Posted tvoimvyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数+进制转换器相关的知识,希望对你有一定的参考价值。
一.运行截图
注释:正常操作由二进制数转换为八进制数。
注释:如果输入输出前后进制类型相同,输出输入的值。
注释:如果输入进制类型不是规则给定的,输出错误。
注释:如果输入进制类型不是规则给定的,输出错误。
注释:如果输入的数与该数进制类型不符,输出错误。
二.函数介绍
①二进制→八进制
void twoTOeight(int x){ if(x%10>1){ printf("ERROR!"); return; } int result1=0,result2=0,i=0,remainder; while(x!=0){ remainder=x%10; result1+=remainder*pow(2,i); i++; x=x/10; } i=1; while(result1!=0){ result2+=(result1%8)*i; result1=result1/8; i=i*10; } printf("转换成功! 结果为:%d",result2); }
思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为八进制。
②二进制→十进制
void twoTOten(int x){ if(x%10>1){ printf("ERROR!"); return; } int result1=0,i=0,remainder; while(x!=0){ remainder=x%10; result1+=remainder*pow(2,i); i++; x=x/10; } printf("转换成功! 结果为:%d",result1); }
思路:首先判断输入的数是否合法,再将输入的数转为十进制。
③八进制→二进制
void eightTOtwo(int x){ if(x%10>7){ printf("ERROR!"); return; } int result1=0,result2=0,i=0,remainder; while(x!=0){ remainder=x%10; result1+=remainder*pow(8,i); i++; x=x/10; } i=1; while(result1!=0){ result2+=(result1%2)*i; result1=result1/2; i=i*10; } printf("转换成功! 结果为:%d",result2); }
思路:首先判断输入的数是否合法,再将输入的数转为十进制,再转为二进制。
④八进制→十进制
void eightTOten(int x){ if(x%10>7){ printf("ERROR!"); return; } int result1=0,i=0; while(x!=0){ result1+=(x%10)*pow(8,i); i++; x=x/10; } printf("转换成功! 结果为:%d",result1); }
思路:首先判断输入的数是否合法,再将输入的数转为十进制。
⑤十进制→二进制
void tenTOtwo(int x){ int result1=0,i=1; while(x!=0){ result1+=(x%2)*i; x=x/2; i=i*10; } printf("转换成功! 结果为:%d",result1); }
思路:直接由十进制转为二进制。
⑥十进制→八进制
void tenTOeight(int x){ int result1=0,i=1; while(x!=0){ result1+=(x%8)*i; x=x/8; i=i*10; } printf("转换成功! 结果为:%d",result1); }
思路:直接由十进制转为八进制。
三.main函数
int main() { int system1,system2,x; printf("输入待转换值为何进制数 "); printf("二进制输入2;八进制输入8;十进制输入10 "); printf("输入进制数:"); scanf("%d",&system1); if(system1!=2&&system1!=8&&system1!=10){ printf("ERROR!"); return 0; } printf("输入转换后的数为何进制数 "); printf("二进制输入2;八进制输入8;十进制输入10 "); printf("输入进制数:"); scanf("%d",&system2); if(system2!=2&&system2!=8&&system2!=10){ printf("ERROR!"); return 0; } printf("输入待转换数:"); scanf("%d",&x); if(system1==2&&system2==8){ twoTOeight(x); } if(system1==2&&system2==10){ twoTOten(x); } if(system1==8&&system2==2){ eightTOtwo(x); } if(system1==8&&system2==10){ eightTOten(x); } if(system1==10&&system2==2){ tenTOtwo(x); } if(system1==10&&system2==8){ tenTOeight(x); } if(system1==system2){ printf("你想这么玩吗,那答案就是%d",x); } return 0; }
四.思维导图
五.问题解答
问题①:如何使输入不合本程序规则的进制类型输出错误。如,输入七进制,输出ERROR!
解决方案:
scanf("%d",&system1); if(system1!=2&&system1!=8&&system1!=10){ printf("ERROR!"); return 0; }
若输入的值不是2或8或10,输出ERROR!
问题②:如何输入不符进制类型的待转换数输出错误。如,输入二进制,输入19,输出ERROR!
解决方案:
if(x%10>1){ printf("ERROR!"); return; }
在每个函数之前(除10进制,系统已默认十进制所以不需要)加入该代码,二进制余数大于1,八进制余数大于7,即可满足要求。
六.代码互评
void Numchange(int m, int b)//将10进制数转化为任意进制数 { int n = m; int count = 0; if (m == 0) printf("0"); while (n != 0) { n = n / b; count++; } int number; for (int i = count; i >= 1; i--) { number = m / (int)pow(b, i - 1); if (number < 10) { printf("%d", number); } else { printf("%c", number + 55); } m = m % (int)pow(b, i - 1); } }
可以看出他的代码的范畴更广,不像我局限于指定由何进制转换为何进制,他的代码可以让10进制转换为任意进制,而其他的进制又比较容易转为十进制,可以看出这个代码已经基本完成了任意进制转换为任意进制,灵活性非常高,而这种灵活性是学习代码,使用代码所必要的,是我非常需要学习和改进的地方。
七.总结
1.学会如何从二进制转换为其他进制,反之亦然。
2.在代码互评中明白了代码不仅要对,还要活,这是我必然要学习的地方。
3.函数的应用使得我打代码时的思路更加的清晰,使主函数部分的代码变得清晰明朗,函数部分的代码也能更好的编写和体现。
以上是关于函数+进制转换器的主要内容,如果未能解决你的问题,请参考以下文章