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);
输出结果: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); }