# 起因
最近了解了一下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/#
# 结尾
这个算法可能效率不高,但是实现了基本功能,有空再优化速度吧,最近挺忙的。