2012-10-05 17 views
3

我對方案很新穎。我知道如何從十進制轉換爲二進制,但我不能與其他方式轉換的邏輯來。我想從二進制數列表中得到一個十進制數。小數在方案中將包含二進制數的列表轉換爲十進制和十六進制

例子:

(decimal '(1 0 1)) ---> 5 

十六進制的例子:

(hexadecimal '(1 0 0 0 1)) ----> 12 

到目前爲止,我認爲這是可以做到以列表的最後一個號碼,並通過2 遞歸乘以我代表列表中的位置,所以最後一個數字乘以1,下一個乘以2,依此類推。最後在每個遞歸循環中添加這些數字。不知道如何執行這個想法,也不知道它會起作用。

回答

0

您對解決方案的書面描述是正確的 - 您只需執行 即可執行。一對夫婦指針:

  • 邏輯是容易得多,如果你扭轉名單
  • 通過每個數字的權重,累計金額爲 參數的遞歸函數使得它簡單

你走在正確的軌道上 - 不斷嘗試。僞代碼嘗試可能會讓你更清楚。

0
(defun bin-list-to-dec (lst) 
    (reduce (lambda (x y) (+ (* x 2) y)) lst)) 
0
(define (binary->natural lon) 
    (if (null? lon) 
     0 
     (+ (car lon) (* 2 (binary->natural (cdr lon)))))) 
+1

請也添加一些說明你的代碼。 –

相關問題