進製轉換 杭電oj 2031題(c語言解決)

2021-10-02 09:18:56 字數 1545 閱讀 7950

前言

來進製轉換吧!

做到後面發現前面還有個2031漏網之魚

輕微強迫症決定解決它

補一波知識,以後需要轉換也能直接從這裡copy**,哈哈

題目

基礎知識

十進位制轉r進製規則:十進位制數除以r進製得a,存餘數,再用a除以r進製得a,存餘數……直至a=0。最後所有餘數倒置就是轉換得數。

看這個可能看不大懂,直接想想當初如何把十進位制轉換二進位制的吧!

比如,24,轉換成二進位制就是。。

11000

差不多就這意思(手殘黨畫不出什麼好東西)

然後我們試試三進製!

還是用可憐的24來試試

啊我 cao

我要被我的畫風醜哭了

不管了,驗證一下是不是220,3的0次0+3的1次2+3的2次*2=24!

然後以此就可以類推456789進製了

然後,開始驗證大於十的進製,比如,十六進製制。

來個大點的數,比如31

於是,不管幾進製,只要是從十進位制轉換而來的,就可以用除餘轉化。

同理,如果你想x進製轉換到y進製,只要把它先按位轉換成十進位制,再轉換成y進製就好了。

還有個地方,我們需要把15轉換為十六進製制的f

這個很簡單啊,比如a[i]裡的餘數是15,我們就可以。。

a[i]

='a'

+a[i]-10

;

因為10的話就是a,很好理解噠。

最後還有個小坑小坑小坑坑

負數!負數不能直接轉換,要轉換為正數然後轉換完了再添負號,不然答案不對。。

(我也不知道為什麼)

然後附上ac**

#include

#include

// abs,你懂我也懂。

intmain()

i--;//因為迴圈結束i已經跑到末尾+1去了

for(

;i>=

0;i--)if

(a[i]

>9)

printf

("%c"

,a[i]

+'a'-10

);else

printf

("%d"

,a[i]);

putchar

('\n');

}}

話說最近經常看到馬孟起關雲長趙子龍他們成功ac,只要我在做都能看到那幾個三國大佬,這成功次數和提交次數比例。。。。

這莫非是某個用爬蟲寫了個指令碼抓取網上ac自動提交?

杭電2031 進製轉換

主要是注意把轉換後大於9的化為a,b。再注意一下正負數,中紅色部分就是對這些問題的處理!problem description 輸入乙個十進位制數n,將它轉換成r進製數輸出。input 輸入資料報含多個測試例項,每個測試例項包含兩個整數n 32位整數 和r 2 r 16,r 10 output 為每...

進製轉換(杭電2031)

進製轉換 problem description 輸入乙個十進位制數n,將它轉換成r進製數輸出。input 輸入資料報含多個測試例項,每個測試例項包含兩個整數n 32位整數 和r 2 r 16,r 10 output 為每個測試例項輸出轉換後的數,每個輸出佔一行。如果r大於10,則對應的數字規則參考...

進製轉換(杭電2031)

進製轉換 problem description 輸入乙個十進位制數n,將它轉換成r進製數輸出。input 輸入資料報括多個測試例項,每乙個測試例項包括兩個整數n 32位整數 和r 2 r 16,r 10 output 為每乙個測試例項輸出轉換後的數,每乙個輸出佔一行。假設r大於10,則相應的數字規...