題目:
問題 b: ds佇列+堆疊--數制轉換
時間限制:
1 sec 記憶體限制:
128 mb
提交:340 解決:
285[提交]
[狀態]
[討論版]
題目描述
對於任意十進位制數轉換為k進製,包括整數部分和小數部分轉換。整數部分採用除k求餘法,小數部分採用乘k取整法例如x=
19.125,求2進製轉換
整數部分19, 小數部分0.12519/
2=9 … 1
0.125*2
=0.25 … 09/
2=4 … 1
0.25*2
=0.5 … 04/
2=2 … 0
0.5*2=
1 … 12/
2=1 … 01/
2=0 … 1
所以整數部分轉為 10011,小數部分轉為0.001,合起來為10011.001
提示整數部分可用堆疊,小數部分可用佇列實現
注意:必須按照上述方法來實現數制轉換,其他方法0分
輸入第一行輸入乙個t,表示下面將有t組測試資料。
接下來每行包含兩個引數n和k,n表示要轉換的數值,可能是非整數;k表示要轉換的數制,1
16輸出
對於每一組測試資料,每行輸出轉換後的結果,結果精度到小數點後3位
輸出小數點後幾位的**如下:
#include
#include
using
namespace std;
intmain()
樣例輸入
219.125
215.125
16樣例輸出
10011.001
f.200
**塊:#include
#include
#include
using
namespace std;
intmain()
int temp =3;
while
(temp--
)char letter[6]
=;while
(!numint.
empty()
) cout<<
'.';
while
(!numdou.
empty()
) cout<}return0;
}
題解:
十進位制轉化為k進製方法為整數部分除k取餘,得到的商繼續除k取餘,小數部分乘k取整,再取小數部分繼續乘k取整,直到取到相應的精度後停止。
如果數是按照從左到右輸出的話,則小數部分是先取先輸出,符合佇列的思想,而整數部分是先取後輸出,符合棧的思想。
如果進製數k大於10,則棧和佇列中會出現大於10的元素,要轉化為相應的字母後才能輸出。
DS佇列 堆疊 數制轉換
對於任意十進位制數轉換為k進製,包括整數部分和小數部分轉換。整數部分採用除k求餘法,小數部分採用乘k取整法例如x 19.125,求2進製轉換 整數部分19,小數部分0.125 19 2 9 1 0.125 2 0.25 0 9 2 4 1 0.25 2 0.5 0 4 2 2 0 0.5 2 1 1...
DS佇列 堆疊 數制轉換
題目描述 對於任意十進位制數轉換為k進製,包括整數部分和小數部分轉換。整數部分採用除k求餘法,小數部分採用乘k取整法例如x 19.125,求2進製轉換 整數部分19,小數部分0.125 19 2 9 1 0.125 2 0.25 0 9 2 4 1 0.25 2 0.5 0 4 2 2 0 0.5 ...
DS之棧實現數制轉換
要想實現對於乙個非負十進位制整數轉換為不大於十進位制的數的方法有很多,其中乙個基於棧的先進後出的固有特性實現的。在進行進製轉換的過程中,由於基於公式 n n div d d n mod d 其中 div為整除運算,mod為求餘運算 的計算過程是從低位到高位順序產生所要轉換進製數的各個數字,而輸出的時...