洛谷P1017(進製轉換)

2021-10-08 09:12:53 字數 1675 閱讀 1191

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

2+2×

101+3

×10

01 \times ^2+2 \times ^1+3\times ^0

1×102+

2×10

1+3×

100這樣的形式。

與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置為指數,以 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,以此類推。

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

110001=1

×(−2

)5+1

×(−2

)4+0

×(−2

)3+0

×(−2

)2+0

×(−2

)1+1

×(−2

)0

110001=1\times^5+1\times^4+0\times^3+0\times^2+0\times^1+1\times^0

110001

=1×(

−2)5

+1×(

−2)4

+0×(

−2)3

+0×(

−2)2

+0×(

−2)1

+1×(

−2)0

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

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

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

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

這題可能有點嚇人的就是負數除法,這個其實也沒啥,如果熟正數的,負數也簡單,但是注意一點就是除出來之後可能是乙個負數,當然,這個負數的絕對值一定比除數的絕對值小,這和普通除法還是一樣的,那麼可以用餘數減乙個除數,相應地,商要加一,接著用商除以除數,直到商為0。

talking is cheap,show you my code.

#include

#include

using

namespace std;

intmain()

s.push

(t);

}while

(n !=0)

; cout << m <<

"=";

while

(!s.

empty()

)else

s.pop();

} cout <<

"(base"

<< r <<

")"<< endl;

return0;

}

洛谷 P1017 進製轉換

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

洛谷 P1017 進製轉換

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

洛谷 P1017 進製轉換

傳送門 該題考察的較為基礎,雖然俺從前沒有學過負進製除法,但是自己短除取餘,找找規律即可 例如,15 2 7 1,但是,題目說餘數不能為負。餘數怎麼求呢,餘數 15 15 2 之所以得到負數,是因為 15 2的絕對值是小於 15的,且為絕對值的最大值。那麼,在餘數為負數時,我們讓商 1即可,即餘數 ...