binary - Racket 二进制加法

标签 binary sum racket addition

我有一个关于 Racket 的问题。 给定 2 个字符串二进制数,我想以字符串二进制数形式获取它们的和。该函数应考虑进位和可能的溢出。 所以这个函数应该是这样的:

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

例如:

(binary-sum "010" "001")

"011"

或者:

(binary-sum "0010" "1011")

"1101"

或者在溢出的情况下:

(binary-sum "1111" "0001")

"overflow"

请确定我需要的任何软件包。

谢谢!

最佳答案

Racket 中的二进制值使用前缀 #b 指定。使用它,我们可以创建以下函数:

> (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

关于binary - Racket 二进制加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53622472/

相关文章:

mysql - SUM 连接表的查询如何?

mysql - 如何使用 Mysql SUM 和 JOIN

c++ - 如何在这种情况下存储数组的和

具有多个输出的 Racket 中的单元测试

unit-testing - 在 Racket 中使用模拟对象进行猴子修补

c - Stdin + 字典文本替换工具 -- 调试

c - 过程链接表的用途是什么?

scheme - 方案中范围集合的交集

python - 如何在 Python 中将字符串列表转换为整数列表?

python - 你如何在 Python/Bash/AWK 中使用二进制转换?