P1017 進製轉換

2021-09-25 11:36:43 字數 2222 閱讀 6323

我們可以用這樣的方式來表示乙個十進位制數: 將每個阿拉伯數字乘以乙個以該數字所處位置的(值減11)為指數,以1010為底數的冪之和的形式。例如:123123可表示為 1 \times 10^2+2\times 10^1+3\times 10^01×102+2×101+3×100這樣的形式。

與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置的(值-1−1)為指數,以22為底數的冪之和的形式。一般說來,任何乙個正整數rr或乙個負整數-r−r都可以被選來作為乙個數制系統的基數。如果是以rr或-r−r為基數,則需要用到的數碼為 0,1,....r-10,1,....r−1。例如,當r=7r=7時,所需用到的數碼是0,1,2,3,4,50,1,2,3,4,5和66,這與其是rr或-r−r無關。如果作為基數的數絕對值超過1010,則為了表示這些數碼,通常使用英文本母來表示那些大於99的數碼。例如對1616進製制數來說,用aa表示1010,用bb表示1111,用cc表示1212,用dd表示1313,用ee表示1414,用ff表示1515。

在負進製數中是用-r−r作為基數,例如-15−15(十進位制)相當於110001110001(-2−2進製),並且它可以被表示為22的冪級數的和數:

110001=1\times (-2)^5+1\times (-2)^4+0\times (-2)^3+0\times (-2)^2+0\times (-2)^1 +1\times (-2)^0110001=1×(−2)5+1×(−2)4+0×(−2)3+0×(−2)2+0×(−2)1+1×(−2)0

設計乙個程式,讀入乙個十進位制數和乙個負進製數的基數, 並將此十進位制數轉換為此負進製下的數:-r∈−r∈−2,−3,−4,...,−20

輸入格式:

輸入的每行有兩個輸入資料。

第乙個是十進位制數nn (-32768 \le n \le 32767−32768≤n≤32767)

第二個是負進製數的基數-r−r。

輸出格式:

結果顯示在螢幕上,相對於輸入,應輸出此負進製數及其基數,若此基數超過1010,則參照1616進製制的方式處理。

輸入樣例#1:複製

30000 -2
輸出樣例#1:複製

30000=11011010101110000(base-2)
輸入樣例#2:複製

-20000 -2
輸出樣例#2:複製

-20000=1111011000100000(base-2)
輸入樣例#3:複製

28800 -16
輸出樣例#3:複製

28800=19180(base-16)
輸入樣例#4:複製

-25000 -16
輸出樣例#4:複製

-25000=7fb8(base-16)
這個題目的關鍵之處在於如何轉化為負進製數

我們只需要將商+1,餘數-除數即可,因為餘數(絕對值)一定小於除數,所以這樣就可以將餘數裝換為正數

正確性證明:

(商+1)*除數+(餘數-除數)=商*除數+除數+餘數-除數=商*除數+餘數=被除數
例如:

把15轉化為-3進製。

短除法並且倒序之後結果為1,-2,0。而我們的進製中是不能出現-2的,所以我們可以這樣考慮,-2這位代表的是-3,而1位代表的是9,我們可以把-2這位加上3,這樣本來應該是−3∗−2=6,變成了−3∗1=−3−3∗−2=6,變成了−3∗1=−3,差值為6−(−3)=96−(−3)=9,正好為其前面一位1代表的數,這是在1進一位變成2即可,最後轉換完就是2,1,0。

#include#include#include#include#include#include#includeusing namespace std;

int main()

else

if (t <= 9)

else

} reverse(res.begin(), res.end());

cout << res;

cout << "(base" << base << ")" << endl;

return 0;

}

P1017 進製轉換

我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置的 值減1 為指數,以10為底數的冪之和的形式。例如 123可表示為 1 102 2 101 3 1001 times 10 2 2 times 10 1 3 times 10 01 102 2 10 1 3 100 ...

P1017 進製轉換

題目描述 我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置的 值減11 為指數,以1010為底數的冪之和的形式。例如 123123可表示為 1 times 10 2 2 times 10 1 3 times 10 01 10 2 2 10 1 3 10 0這樣的形式...

P1017 進製轉換

我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置的 值減11 為指數,以1010為底數的冪之和的形式。例如 123123可表示為 1 times 10 2 2 times 10 1 3 times 10 01 102 2 101 3 100這樣的形式。與之相似的,對...