一般分為
二、八、十、十六這幾種常見的(沒錯就是我現在能見到的)
x進製就是0~x-1構成每一位,就如二進位制是0、1,八進位制是0到7
數制轉換一直是計算機的乙個基本問題,目前已經有了很多的解決方法。
如果是其他進製轉換十進位制(因為十進位制多數人還是比較熟悉的,畢竟買菜時價錢不是二進位制的)
先找到每乙個數字的位數:
整數部分將個位置為0位,往前依次加一位;
小數部分第一位是-1,往後依次減一;
因為是二進位制,所以應該是二的多少倍乘以原來二進位制的數字,如個位應該是:
2的零次冪乘一。
求和就可以得到答案了。
十進位制轉其他進製的話,也是類似,就是將過程反過來了。
1.正數
將原來的項除進製(這裡取2),商保留,餘項寫在旁邊;
不斷進行該操作,直到剩下餘項為止。
將餘項反過來,就是答案了。
反過來算一遍,2+16+32=50.
2.小數
和上面的小數部分反過來,將小數部分乘二,每一次都取整數部分,直到小數部分為0.
0.001,算一下也就是0.125了。
3.負數
這個稍有不同,因為負數的二進位制有補碼的存在,所以會所有不同。
其實也就是按正的算完了加乙個求補碼的過程:0 1取反後加一
如50是110010
那麼-50應該先取反(叫反碼)001101
然後加一:010010
那這些和棧有什麼關係呢?
來了來了,那就是在十進位制正數部分有乙個將商取反的過程,剛好和棧的功能相匹配
嗯,就是這樣
(所以我這篇文章到底在講什麼啊,枯了)
#include
#define n 8
//八進位制,可改
using
namespace std;
struct link//棧
;void
input
(struct link* head,
int a)
//壓棧
void
output
(struct link* head)
//出棧
void
work
(int number)
while
(head-
>next)
//輸出棧
free
(head);}
intmain()
友情提示一下,**中的壓棧出棧函式並不是非常嚴格的,只是在這個**塊裡面沒有問題,正常應該有乙個出棧判空等其他的,這裡因為沒必要而沒有深究跑了50,結果是62(八進位制) 棧的應用(數制轉換)
程式功能 對於輸入的任意乙個非負十進位制整數,列印輸出與其等值的八進位制數。標頭檔案 c3 1.h ifndef c 3 1 h define c 3 1 h include include include define true 1 define false 0 endif algorithm.h...
數制轉換 棧的應用
問題描述 將乙個非負的十進位制整數n轉換為另乙個等價的基為b的b進製數的問題。解答 按除2取餘法,得到的餘數依次是1 0 1 1,則十進位制數轉化為二進位制數為1101。分析 由於最先得到的餘數是轉化結果的最低位,最後得到的餘數是轉化結果的最高位,因此很容易用棧來解決。如下 include incl...
棧的應用 數制轉換
數制轉換 十進位制數n和其它d進製數的轉換是計算機實現計算的基本問題,其解決方法很多,其中一種簡單方法基於以下原理.n n div d d n mod d 其中 div為整除運算,mod 為求餘運算.例如 10進製數1348轉換為8進製為 2504.其運算過程如下 n n div d n mod d...