P1017 進製轉換 負數進製

2021-09-11 00:24:54 字數 1142 閱讀 5261

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

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

110001=1×(−2)5+1×(−2)4+0×(−2)3+0×(−2)2+0×(−2)1+1×(−2)0

輸入:15 -2 輸出 15=110001(base-2)

在計算機運算中會出現取模結果為負數的情況,例如:

-3 / -2 = 1

-3 % -2 = -1

餘數是負的,這是我們不想看到的,因為如果想把 n 轉化為 r 進製,每一步只需要把 n 對 r 取模結果存起來,並除以 r ,直到為0停止,最後輸出就是 r 進製表示n的結果,對於負數也是如此,所以這個過程中只需要把取模後為負數的數變正數就好了。

k = n / r                         對應        1 = -3 / -2

n % r = t                       對應        -3 % -2 = -1

n = r * k + t                   對應        -3 = -2* 1 - 1

n = r * (k + 1) + t - r      對應        -3 = -2 * 2 - 1 - (-2) = -2 * 2 + 1    (這樣就把取模後的數從負數變成正數了)

#include#include#include#include#include#include#include#include#include#include#include#define up(i, x, y) for(int i = x; i <= y; i++)

#define down(i, x, y) for(int i = x; i >= y; i--)

#define maxn ((int)1e5 + 10)

#define inf 0x3f3f3f3f

using namespace std;

typedef long long ll;

string str = "0123456789abcdefghigklmnopqrstuvwxyz";

int main()

while(!st.empty())

printf("(base%d)\n", r);

}

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