[英]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.