如何使用BrainF**k实现乘法计算?

# 起因

最近了解了一下BrainFuck语言,发现还挺好玩,于是想实现一下乘法功能


# 思路

  • 既然要实现乘法,那么我们要了解一下乘法的本质
百度百科

乘法(multiplication),是指将相同的数加起来的快捷方式。其运算结果称为积,“x”是乘号。从哲学角度解析,乘法是加法的量变导致的质变结果。

来源:https://baike.baidu.com/item/%E4%B9%98%E6%B3%95/11036001?fr=aladdin

那么我们就顺着乘法的本质,去实现乘法。

# 代码

带有解释版的代码:

index:0
index 2 作为计算结果位置
index 3 作为存储位置,与index4交换数据,数据为index0的数据
++++++  index:0 —— 6
> index:1
+++++++++  index:1 —— 9

此处的几个加号是存储一下被乘数和乘数
我们使用乘数(index为1的数)去循环加乘数(index为0的数字)

< index:0
[-
>>>+ index 3
<<< index 0
]   index:0

index 2 3 都是 index1的数据

> index 1
[
-
>> index:3



把index3的数据叠加到index2 并且赋值给index4
[-
>+ index 4
<<+ index 2
> index 3
]

> index 4

把index4的值赋值给 index3

[-
<+ index 3
> index 4
]


<<< index1
]

纯指令版(装逼用)

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

注:此代码的开头 ++++++>+++++++++ 是存储需要乘和被乘的数字,可以根据需要自行更改,也可以替换成 , 来输入数字
不过我用的那个在线解释器不支持输入数字,所以只能写死了。


# 结果

就是这么简单,实现了乘法


# 推荐一个在线运行BrainF**k的可视化解释器

http://fatiherikli.github.io/brainfuck-visualizer/#


# 结尾

这个算法可能效率不高,但是实现了基本功能,有空再优化速度吧,最近挺忙的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code