进制转换

/所用的栈模板请参阅《顺序栈模板》

一、十进制转二进制:

ElemType c; SqStack s; int len,i,sum=0; InitStack(&s); printf("请输入二进制数,输入#符号表示结束!\n"); scanf("%c",&c); while (c!='#') { Push(&s,c); scanf("%c",&c); } getchar(); /*把'\n'从缓冲区去掉*/ len=StackLen(s); printf("栈的当前容量是:%d\n",len); for (i=0;i<len;i++) { Pop(&s,&c); sum+=(c-48)*pow(2.0,i); } printf("转换为十进制数是: %d\n",sum);

代码注释也够清晰,输出结果如下:
栈之进制转换 - Ben - Ben的博客
 
二、二进制转八进制:
二进制转八进制需要两个栈,第一个用于存储逆序的二进制数,第二个用于存放已经转换的八进制数,最后pop。
代码如下:

ElemType c; SqStack s1; InitStack(&s1); int len,i=1,j=0; int sum=0; printf("请输入二进制数,已#符号结束:\n"); scanf("%c",&c); while (c!='#') { Push(&s1,c); scanf("%c",&c); } getchar(); len=StackLen(s1); printf("栈的当前容量为%d\n",len); SqStack s2; InitStack(&s2); printf("八进制为:"); while (i<=len) { Pop(&s1,&c); sum+=(c-48)*pow(2.0,j++); if (i%3==0) //够位数,压栈 { Push(&s2,(char)(sum+48)); sum=0; j=0; } i++; } if (sum!=0) //如果剩余的二进制数不足三位,上面的while循环将不会将它压入栈中,自己来 { Push(&s2,(char)(sum+48)); }

//输出 len=StackLen(s2); for (int i=0;i<len;i++) { Pop(&s2,&c); printf("%c",c); }

输出结果:
栈之进制转换 - Ben - Ben的博客
 
三、二进制转换十六进制:
其实二进制转换十六进制的方法特别和二进制转换八进制的方法类似,把上述代码改改就OK,大于10的就转换为ABCDEF。方法如果有时间我会加上来的!

明天晚上搞表达式求值!!!!!
vicky!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值