簡體   English   中英

球拍二進制加法

[英]Racket Binary Addition

我有一個關於球拍的問題。 給定2個字符串二進制數,我想以字符串二進制數獲取它們的總和。 該功能應考慮進位和可能的溢出。 因此該函數應如下所示:

(define (binary-sum a b) ...)

例如:

(binary-sum "010" "001")

"011"

要么:

(binary-sum "0010" "1011")

"1101"

或在發生溢出的情況下:

(binary-sum "1111" "0001")

"overflow"

請確定我需要的任何包裹。

謝謝!

使用前綴#b指定Racket中的二進制值。 使用它,我們可以創建以下函數:

> (define (binary-sum a b)
  (+ (string->number (string-append "#b" a))
     (string->number (string-append "#b" b))))

> (binary-sum "010" "001")
3

要將輸出格式也設置為二進制,我們可以使用~r ,如下所示:

> (define (binary-sum a b)
  (~r (+ (string->number (string-append "#b" a))
      (string->number (string-append "#b" b))) #:base 2))

> (binary-sum "010" "001")
011

最后,要添加您的溢出功能,我們可以簡單地將結果的字符串長度與參數之一的長度進行比較。

(define (binary-sum a b)
  (let ((sum (~r (+ (string->number (string-append "#b" a))
                    (string->number (string-append "#b" b)))
                 #:base 2)))
    (if (> (string-length sum)
           (string-length a))
        "overflow"
        sum)))

它的行為與您的問題所指定的完全相同。 如果您還有其他疑問或困惑,請告訴我。 祝好運!

編輯:只是要注意,如果您只需要添加兩個二進制值並且不介意取回整數,則總是可以這樣進行:

> (+ #b010 #b001)
3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM