N進製與十進位制之間的 轉換(整數,小數)

2022-08-20 20:09:12 字數 1574 閱讀 6881

**自 

1) 整數部分

十進位制整數轉換為n進製整數採用「除n取餘,逆序排列」法。具體做法是:

將n作為除數,用十進位制整數除以n,可以得到乙個商和餘數;

保留餘數,用商繼續除以n,又得到乙個新的商和餘數;

仍然保留餘數,用商繼續除以n,還會得到乙個新的商和餘數;

如此反覆進行,每次都保留餘數,用商接著除以n,直到商為0時為止。

把先得到的餘數作為n進製數的低位數字,後得到的餘數作為n進製數的高位數字,依次排列起來,就得到了n進製數字。

下圖演示了將十進位制數字36926轉換成八進位制的過程:

從圖中得知,十進位制數字36926轉換成八進位制的結果為110076。

下圖演示了將十進位制數字42轉換成二進位制的過程:

從圖中得知,十進位制數字42轉換成二進位制的結果為101010。

2) 小數部分

十進位制小數轉換成n進製小數採用「乘n取整,順序排列」法。具體做法是:

用n乘以十進位制小數,可以得到乙個積,這個積包含了整數部分和小數部分;

將積的整數部分取出,再用n乘以餘下的小數部分,又得到乙個新的積;

再將積的整數部分取出,繼續用n乘以餘下的小數部分;

如此反覆進行,每次都取出整數部分,用n接著乘以小數部分,直到積中的小數部分為0,或者達到所要求的精度為止。

把取出的整數部分按順序排列起來,先取出的整數作為n進製小數的高位數字,後取出的整數作為低位數字,這樣就得到了n進製小數。

下圖演示了將十進位制小數0.930908203125轉換成八進位制小數的過程:

從圖中得知,十進位制小數0.930908203125轉換成八進位制小數的結果為0.7345。

下圖演示了將十進位制小數0.6875 轉換成二進位制小數的過程:

從圖中得知,十進位制小數 0.6875 轉換成二進位制小數的結果為 0.1011。

如果乙個數字既包含了整數部分又包含了小數部分,那麼將整數部分和小數部分開,分別按照上面的方法完成轉換,然後再合併在一起即可。例如:

十進位制數字 36926.930908203125 轉換成八進位制的結果為 110076.7345;

十進位制數字 42.6875 轉換成二進位制的結果為 101010.1011。

下表列出了前17個十進位制整數與二進位制、八進位制、十六進製制的對應關係:

注意,十進位制小數轉換成其他進製小數時,結果有可能是乙個無限位的小數。請看下面的例子:

十進位制0.51對應的二進位制為0.100000101000111101011100001010001111010111...,是乙個迴圈小數;

十進位制0.72對應的二進位制為0.1011100001010001111010111000010100011110...,是乙個迴圈小數;

十進位制0.625對應的二進位制為0.101,是乙個有限小數。

十進位制數與N進製的轉換

1 問題描述 將從鍵盤輸入的十進位制數轉換為n 如二進位制,八進位制,十六進製制 進製資料。2 要求 利用順序棧實現數制轉換問題 include include 定義棧結構 typedef struct stackstack 宣告函式 void settable char table void pu...

十進位製到n進製的轉換

隱藏行號 複製 demo n is the base,translate m to n baseint d2n base int m,int n,int buffer buffer index r return index int main int argc,char argv endif here...

十六進製制與十進位制之間的轉換

十六進製制轉換成十進位制的思路 先把十六進製制轉換成二進位制,再把二進位制轉換成十進位制 include include include using namespace std string hextobin string hex return bin long long bintodecimal ...