棧的應用1 數制轉換

2021-10-08 04:02:45 字數 1571 閱讀 6109

一般分為

二、八、十、十六這幾種常見的(沒錯就是我現在能見到的)

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...