作者UCDaLanJiao (UCD艾倫吉奧)
看板C_and_CPP
標題[問題] 寫一段進位轉換的code
時間Tue Mar 29 11:38:42 2016
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
c++
問題(Question):
我想用c++ 寫一段 code 可以把任一個進位(base) 轉成 任一個進位的數
(convert a number from one base to another)
可互相轉換的進位範圍(base) 從 2 到 36
轉換之後的兩位數 10 到 35 則轉成 A 到 Z 字母表示
餵入的資料(Input):
input:1.輸入一個數的進位(base) : 6
2.以及這個數在這個進位的表示方式: 405
3. 一個新的進位(new base): 19
( 一個 6進位的數 405 用 19進位表示 )
預期的正確結果(Expected Output):
output: 7G
錯誤結果(Wrong Output):
數學上都會轉 但是寫成code 的過程很笨
程式碼(Code):(請善用置底文網頁, 記得排版)
因為 code 實在不太懂怎麼下手
我的想法是要不要先把 舊的數轉成10 進位之後 再寫成 新的進位
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 107.0.114.147
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1459222725.A.2F7.html
1F:推 WBTs: 就照你說的先轉成10進位,在用遞迴像 03/29 12:37
2F:→ WBTs: void printc(int c){ 03/29 12:37
3F:→ WBTs: 把c換成字元再輸出 03/29 12:37
4F:→ WBTs: } 03/29 12:38
5F:→ WBTs: void prin(int x,int y){ /*x為10進位的數,y為欲換成的進 03/29 12:38
6F:→ WBTs: 位*/ 03/29 12:38
7F:→ WBTs: if(x>=y){ 03/29 12:38
8F:→ WBTs: prin(x/y) ; 03/29 12:38
9F:→ WBTs: printc(x%y); 03/29 12:38
10F:→ WBTs: } 03/29 12:38
11F:→ WBTs: } 03/29 12:38
12F:推 WBTs: 寫錯,if那要改成!=0 03/29 12:55
13F:→ UCDaLanJiao: 換成10進位的code 也不會... 03/29 13:42
14F:推 WBTs: 字串存的輸入的數算長度作迴圈,算每一位數乘該位的數基的 03/29 14:03
15F:→ WBTs: 次方累加就好啦。 03/29 14:03
16F:推 WBTs: if(x!=0) prin(x/y,y) 2處錯誤更正 03/29 17:26
17F:推 LPH66: 還是那句老話, 如果發覺轉成程式有困難請畫流程圖 03/29 18:55
18F:→ LPH66: 對流程圖中的某個大步驟有困難就拆小步一點另外畫出來 03/29 18:57
19F:→ LPH66: 一直到每個小步都可以用程式語言敘述時你的程式就完成了 03/29 18:57
20F:→ LPH66: 過程中這個「另外畫出來」的部份也會很自然的成為函數呼叫 03/29 18:58
21F:→ LPH66: 光看別人說這要怎麼寫是沒辦法學到如何拆解問題的心法的 03/29 18:59
22F:→ LPH66: >WBTs 給新手不要用遞迴函式...那可是數歸等級的東西 03/29 19:00
23F:→ LPH66: 除非對抽象思考很有概念, 不然給這種東西只會讓新手更亂 03/29 19:01
24F:→ UCDaLanJiao: 嗯嗯 感謝。我再試試看 03/29 23:07
26F:→ UCDaLanJiao: 10轉成any base寫出來了。但怎麼轉成10不會 03/30 00:54
27F:→ fatrabitree: 轉成10就一個位數一個位數乘base的次方 03/30 00:59
28F:→ UCDaLanJiao: Cin的algorithm 很笨不會寫..用string和while loop 03/30 01:55
29F:→ UCDaLanJiao: 嗎? 03/30 01:56
30F:推 WBTs: 我有寄站內信給你去參考一下吧 03/30 02:00