P1017 進製轉換

2021-10-04 17:58:28 字數 1208 閱讀 9006

將正整數n轉換成進製r的數。其中比較棘手的情況是基數r是負數的情況,因為這時用一般的取模運算,得到的的數碼範圍是[(r+1),0]。但規定此時的數碼依然是非負數。

例如:-16的-2進製表示可以作以下運算:

− 16=

1∗(−

2)5+

1∗(−

2)

4-16=1*(-2)^5+1*(-2)^4

−16=1∗

(−2)

5+1∗

(−2)

4即-16的-2進製表示為:11 0000

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

第乙個是十進位制數 n。 第二個是負進製數的基數 -r。

輸出:輸出此負進製數及其基數,若此基數超過 10,則參照 16 進製的方式處理。

輸入輸出例項:輸入 30000 -2 輸出 30000=11011010101110000(base-2)

首先要了解到c++裡的 % 運算子的計算方法:r=m%n 是用

r =m

−(m/

n)∗n

[1

]r= m- (m/n)*n [1]

r=m−(m

/n)∗

n[1]

得到的,注意m/n為整除法。

可以看出:* 如果m是負數,那麼r也一定是負數 *

還是用上面的-16作為例子,如果-16的-2進製按上面的[1]式計算,最後得到的結果是:(-1)0000,這時候的數碼顯然是不符合要求的。

分析運算過程,如果第i位的數碼ri為負,(i從0開始算,是基數的次數)此時i一定為偶數。要得到非負數的數碼,需要 1*ri+1去加上 |ri|*ri,因為i是偶數,ri+1是負的,運算得到的結果是一樣的。

總結:設m/n=q(整除), r=m%n

有(q+1)*n+(r-n)=q*n+n+r-n=q*n+r=m

這個時候的r一定是正的。

#includeusing namespace std;

void convert(int n, int r);

char charac[20]=; //用於大於10進製的輸出,由於最大是20進製,所以就開到20個

int main()

cin>>n>>r;

cout<9)

cout

cout<}

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這樣的形式。與之相似的,對...