NOIP2000 進製轉換

2022-05-26 23:03:09 字數 1737 閱讀 6202

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

10^2+2\times 10^1+3\times 10^01×

102+

2×10

1+3×

100 這樣的形式。

與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置的(值-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\times

(-2)^5+1\times (-2)^4+0\times (-2)^3+0\times (-2)^2+0\times (-2)^1 +1\times (-2)^011

0001

=1×(

−2)5

+1×(

−2)4

+0×(

−2)3

+0×(

−2)2

+0×(

−2)1

+1×(

−2)0

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

輸入格式:

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

第乙個是十進位制數n(-32768<=n<=32767); 第二個是負進製數的基數-r。

輸出格式:

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

輸入樣例#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)

noip2000提高組第一題

【題解】通過觀察與經驗,我們可以發現每位的數都是n%r 得到的

這與正進製的演算法是一樣的,我們不難知道在做短除法的時候,會有個除法。

比如-3/-2=2這是正確的 因為 -2*2+1=-3 即-3%-2=1

但計算機在計算的時候會得-3/-2=1 這時就需要特判了

#includechar s="0123456789abcdefghijklmn";

void print(int n,int r)

int main()

NOIp2000 進製轉換

題目描述 我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置的 值減1 為指數,以10為底數的冪之和的形式。例如 123可表示為 1 102 2 101 3 100 這樣的形式。與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置的 值 1...

NOIP2000 進製轉換 模擬

題意自己分析。說實話這題沒有什麼意義,因為我認為負數完全可以當正的來做,最後加乙個負號,而他的進製轉換卻如此地坑爹。直接貼 吧。寫得很正常,一點不奇葩。include include include define n 100 using namespace std const char crs n ...

NOIP 2000 進製轉換 解題報告

我也不知道為什麼,負數的進製就是這麼寫的,反正記住就是,如果餘數是負數,那就加上base,然後再用n 新餘數 再除以base。如下 include include define max 10000 int ans max int start const char str 0123456789abcd...