進制轉換

/所用的棧模板請參閱《順序棧模板》

一、十進制轉二進制:

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!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章