首先需要明白正進製的轉換,比如7轉換成二進位制,那麼7/2=3餘1,3/2=1餘1,1/2=1餘0,所以7的二進位制就是倒著寫餘數0111
那麼如果-7轉換成-2進製呢,因為-7/-2=3餘-1,所以我們這個-1沒法處理,所以我們需要乙個看起來很簡單但是想不到的轉換公式:
(商+1)*除數+(餘數-除數)=商*除數+除數+餘數-除數=商*除數+餘數=被除數
也就是我們當-7/-2=3餘-1時,把-1-(-2)=1,然後3+1=4,此時4*-2+1=-7依舊成立,然後因為我們傳參時候需要傳遞商,所以我們要保證商不變的話只要被除數=被除數+除數,這樣商=被除數/除數--->(被除數+除數)/除數=商+1
所以這樣一來我們的餘數成功的轉換成了正數,並且等式依舊成立
**:
#include#include#include#includeusing namespace std;
void fun(int n,int r)
if(m>=10)
m='a'+m-10;
else
m+='0';
fun(n/r,r);
printf("%c",m);
return;
}int main()
題解 負進製
借助於對數字理論的研究,奶牛們打算建立一套計數系統。它們打算建立的計數系統是二進位制的,但基數為 2,而 不是 2。另它們非常高興的是,使用 2作為基數表示數字不需要符號位。我們知道進製數每位的權 從右到左 分 別為1 基數的0次方 基數1,基數2,等等。基數為 2的情況下,每位的權分別為1,2,4...
P1017 進製轉換(C 數論)
我們可以用這樣的方式來表示乙個十進位制數 將每個阿拉伯數字乘以乙個以該數字所處位置為指數,以 10 為底數的冪之和的形式。例如 123 可表示為 1 102 2 101 3 100 這樣的形式。與之相似的,對二進位制數來說,也可表示成每個二進位制數碼乘以乙個以該數字所處位置為指數,以 2 為底數的冪...
1017 負二進位制轉換
題目描述 給出數字 n,返回由若干 0 和 1 組成的字串,該字串為 n 的負二進位制 base 2 表示。除非字串就是 0 否則返回的字串中不能含有前導零。示例 1 輸入 2 輸出 110 解釋 2 2 2 1 2 示例 2 輸入 3 輸出 111 解釋 2 2 2 1 2 0 3 示例 3 輸入...