負進制數

我們可以用這樣的方式來表示一個十進制數:將每個阿拉伯數字乘以一個以該數字所處位置的(值減1)為指數,以10為底數的冪之和的形式。例如,123可表示為1*10^2+2*10^1+3*10^0這樣的形式。與之相似的,對二進制數來說,也可表示成每個二進制數碼乘以一個以該數字所處位置的(值-1)為指數,以2為底數的冪之和的形式。一般說來,任何一個正整數R或一個負整數-R都可以被選來作為一個數制系統的基數。如果是以R或-R為基數,則需要用到的數碼為0,1,....R-1。例如,當R=7時,所需用到的數碼是0,1,2, 3,4,5和6,這與其是R或-R無關。如果作為基數的數絕對值超過10,則為了表示這些數碼,通常使用英文字母來表示那些大於9的數碼。例如對16進制數來說,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。在負進制數中是用-R作為基數,例如-15(+進制)相當於110001(-2進制),並且它可以被表示為-2的冪級數的和數: 110001=1*(-2)^5+1*(-2)^4+0*(-2)^3+0*(-2)^2+0*(-2)^1+1*(-2)^0問題求解:設計一個程式,讀入一個十進制數的基數和一個負進制數的基數,並將此十進制數轉換為此負進制下的數:-R∈-2,-3,-4,....-20

輸入

多組數據,每組數據每行有兩個數。第一個是十進制數N(-32768<=N<=32767); 第二個是負進制數的基數-R。

輸出

相對於輸入,應輸出此負進制數及其基數,若此基數超過10,則參照16進制的方式處理。

樣例輸入

30000 -2

-20000 -2

28800 -16

-25000 -16

樣例輸出

30000=11011010101110000(base-2)

-20000=1111011000100000(base-2)

28800=19180(base-16)

-25000=7FB8(base-16)

代碼

PASCAL 代碼

解釋:

負數進制一樣。每次取的餘數保證在0~-m-1之間。(例如m=-16,則餘數應該在0~15)就可以直接輸出。 所以用系統的“mod”運算符的時候必須注意檢查是不是在該範圍(可能在m+1~0),否則就調整。調整的方法是:

if 餘數<0 then

begin

餘數=餘數-m;

商=商+1;

end;

C++ 代碼

相關詞條

相關搜尋

熱門詞條

聯絡我們