如何使用BrainF**k实现可以取余数的除法?

本问原创首发博客链接:https://blog.mcplugin.cn/p/777

上次实现了一个不带余数的整除运算(https://blog.mcplugin.cn/p/609),这次来个带余数的除法运算。

已知BUG:被除数不得与除数相等(如:1/1 ; 2/2 ; 3/3等);
整数除法最后的商会比正确的商小1,但余数会等于被除数
(如:8/4 == 1······4);

思路

这次和上次一样,仍无具体的电子版草稿,只有纸质草稿。

大体思路为:使用乘法猜商,每猜一次,猜的商都与被除数做差,得到余数,再将余数与除数比较大小,若于数大于除数,则继续猜商;若余数小于除数,则输出。


用法

起始指针、参数、返回值、最终指针与运算损耗:
  • 起始指针:
    • i0
  • 参数:
    • i0:存放被除数
    • i1:存放除数
  • 返回值:
    • i2:存放i0与i1相除后的商
    • i3:存放i0与i1相除后的余数
  • 运算损耗位:
    • i0、i1、i2、i3、i4、i5、i6、i7、i8、i9、i10、i11、i12
  • 最终指针:
    • i1

代码

,>,[[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<+
[->+>>+<<<]>>>[-<<<+>>>]<<[->>>+<<<]>
[->>[->+<<+>]>[-<+>]<<<]>>[-]<<<<<<
[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]
<<[->-<]>[->+>+<<]>>[-<<+>>]<<<<<<<[->>>+>+<<<<]
>>>[-<<<+>>>]>

# ↓对i5 i6比较大小
[->-<[->>>+>>+<<<<<]>[->>>+>>+<<<<<]>>>>
[-<<<<<+>>>>>]>[-<<<<<+>>>>>]<<<>[->+<]<
[[-]>+<]>>[[-]>+<]><<[-<+>]>>[-<<+>>]<<<
[[->[->[-]+<]<]]>[-]>>+<[->-<]>[[-]<<<<<<
[-]>>>>>>]<<<<<<]
# ↑对i5 i6比较大小

>[[-]>>+<<]>>>+<[->-<]>[[-]<<<+>>>]
<<<[[-]>[-<<<<+>>>>]<<<<<<[-]>>>>>]>[-]<<<<<<]

截图

img

计算5÷2的结果——商2余1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值