进制转换

来源:互联网 发布:淘宝女装客服话术 编辑:程序博客网 时间:2024/06/03 23:02

栈的应用进制转换

话不多说直奔主题

1.二进制转换为10进制

首先看二进制数:101010

计算方式是:从左到右(低位到高位)以此0*2^0+1*2^1+0*2^2+1*2^3+0*2^4+1*2^5=2^1+2^3+2^5=42

算法:将你输入的二进制数一次入栈,然后再一次出栈进行sum=sum+(e-48)pow(2,i);这么一个转换。这里的sum就是计算转换后的数字的总和,e为出栈的数字,为什么要-48呢,因为我的是char字符的输入要将它转换为真正的1或者0,pow(2,i),是计算2^i,现在就很好理解这段代码了吧。接下来贴代码

void Convert(){char input;int len;int i = 0,sum=0;char e;stack stack3;Initstack(&stack3);printf("请输入你要转换的二进制数,按#号键结束:");scanf("%c", &input);while ('#' != input){pushstack(&stack3, input);scanf("%c", &input);}len = getlen(stack3);for (i = 0; i < len; i++){popstack(&stack3, &e);sum = sum + (e-48)*(int)pow(2, i);}printf("转后后的结果为:%d\n", sum);}


2.二进制转换为8进制

这个在二进制转换10的进制的基础上只需要要三位一转换就可以了



接下来贴代码:

void Convert(){char input;int i = 0, j = 0;char e;stack stack3;stack stack4;Initstack(&stack3);Initstack(&stack4);printf("请输入你要转换的二进制数,按#号键结束:");scanf("%c", &input);while ('#' != input){pushstack(&stack3, input);scanf("%c", &input);}for (j = 0; j < getlen(stack3)/3||getlen(stack3)!=0; i++)//判断是否进行几次转换{ int sum = 0;for (i = 0; i < 3&&getlen(stack3) != 0; i++)//一次转几个数是否转换完{popstack(&stack3, &e);sum = sum + (e - 48)*(int)pow(2, i);}pushstack(&stack4, sum);}printf("转换后的结果:");while (getlen(stack4)!=0){popstack(&stack4,&e);//取出保存的结果printf("%d", e);}printf("\n");}

3.10进制转换为二进制

这里直接用原始的方法就可以了


代码如下:

void test(){int input;stack stack;Initstack(&stack);printf("请输入你要转换的十进制数:");scanf("%d", &input);do{int sum = 0;int n = 0;sum = input % 2;input /= 2;pushstack(&stack, sum);} while (input != 0);int len = getlen(stack);int count = 0;printf("转换后的二进制为");for (int i = 0; i < len; i++){popstack(&stack, &input);printf("%d",input);count++;}printf("\n");printf("共计:%d位", count);printf("\n");}

以上就是几种简单的栈的应用--进制转换。

原创粉丝点击