VioletTec 发表于 2021-4-4 15:31

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

本帖最后由 VioletTec 于 2021-4-5 08:34 编辑


#### 本文原创首发博客地址:<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

------

## 代码

```BrainFuck
,>,[[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<+
[->+>>+<<<]>>>[-<<<+>>>]<<[->>>+<<<]>
[->>[->+<<+>]>[-<+>]<<<]>>[-]<<<<<<
[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]
<<[->-<]>[->+>+<<]>>[-<<+>>]<<<<<<<[->>>+>+<<<<]
>>>[-<<<+>>>]>

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

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

------

## 截图

!(https://pic.rmb.bdstatic.com/bjh/22b119a4927997b2a91fbeec9cc316c4.png)

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

First丶云心 发表于 2021-4-4 15:52

页: [1]
查看完整版本: [BrainFuck] 如何使用BrainF**k实现可以取余数的除法?