如何在Brainfuck中实现保留原数的a+b求和?
如何在Brainfuck中保留原数实现a+b求和
你的代码触发操作次数超限,是因为存在无限循环——比如[<<<+>>>]这类循环体里没有对当前指针指向的单元格执行减1操作(-),只要单元格值不为0,循环就会无限重复,永远无法终止。
要实现初始内存[A,B]变为[A,B,A+B],核心是在不修改原始A、B的前提下,将两者的值分别复制到第三个单元格相加。以下是可行的实现代码:
; 初始状态:[A, B, 0, 0] << ; 指针移至第一个单元格(A的位置) [- ; 将A临时转移到第四个单元格,清空第一个单元格 >>>+ ; 第四个单元格加1 <<<- ; 第一个单元格减1 ] >>> ; 指针移至第四个单元格(临时存储的A) [- ; 将A移回第一个单元格,同时复制到第三个单元格 <<<+ ; 第一个单元格加1(恢复原始A) >+ ; 第三个单元格加1(复制A的值) - ; 第四个单元格减1,循环终止条件 ] << ; 指针移至第二个单元格(B的位置) [- ; 将B临时转移到第四个单元格,清空第二个单元格 >>+ ; 第四个单元格加1 <<- ; 第二个单元格减1 ] >>> ; 指针移至第四个单元格(临时存储的B) [- ; 将B移回第二个单元格,同时复制到第三个单元格 <<<+ ; 第二个单元格加1(恢复原始B) >+ ; 第三个单元格加1(复制B的值) - ; 第四个单元格减1,循环终止条件 ] << ; 指针最终停在第三个单元格(A+B的结果位置)
这段代码通过第四个单元格作为临时存储区,分别完成A、B的“备份-恢复-复制”操作,全程保留原始的A和B值,最终第三个单元格的值即为A+B。
内容的提问来源于stack exchange,提问作者31b4
相关产品推荐
相关产品推荐

