有人可以在编程语言brainf * ck中发布一个用于将两个一位数相乘的代码吗?
7 回答
,>,< input numbers at cell #1 #2
[
> go to cell #2
[
->+>+<< move data to cell #3 #4
]
>> go to cell #4
[
-<<+>> move data to cell #2
]
<<< go to cell #1
- decrement cell #1
]
>>. output cell #3
程序读取到单元格#1、#2,结果将出现在单元格#3 中
我使用 BF 解释器,我可以在其中输入数字作为数字(不是 ASCII 符号)
好吧,我可能没有最有效的方法来解决它,但它确实有效。我以特定的方式做事,以便它适用于所有这些
2*3=6
6*7=42
4*5=20
所以,这里是:
read
>, >, <<
convert from ascii
+++++ +
[
>----- ---
>----- ---
<<-
]
multiply
>[
>[>+>+<<-]
>[<+>-]
<<-
]
separate numbers
>[-]>+> >+++++ +++++<
[
- >- [>>>]+++++ +++++<<+
[<<<]>>>>
]
<-
<+++++ +++++>>>[-<<<->>>]<<<
convert to ascii
<+++++ +
[
>+++++ +++>
[+++++ +++>]
<[<]>-
]
print
>>[.<<]<[<<]>>.
我使用了这个解释器:http ://esoteric.sange.fi/brainfuck/impl/interp/i.html
好吧,我受到第一个的启发,使它变得更简单:
,>,<>[->+>+<<]>>[->>+<<]<[->>>+<<<]>>>++++++++++++++++++++++++++++++++++++++++++++++++
最终的 48+ 是 bfdev 以 ascii 显示的。
,>,<[>[>+>+<<-]>>[<<+>>-]<<<-]>>.
有点难以理解,但它的工作原理
>[>>>+<<<-]>>>[>+>+<<-]>>[<<+>>-]<<<<<<[>+>+>+<<<-]>>>[<<<+>>>-]>>[-<<<[-<<+>>]<[>+>+<<-]>>[<<+>>-]<<>>>>]<[-]<<[-]<[-]<
我知道这是八年前发布的,但我仍然想分享我的答案,以防其他人偶然发现这个帖子。
,>,>++++++[-<--------<-------->>]<<[->[->+>+<<]>[-<+>]<<]>[-]
>+>[->+<<<<+>>>]>[<<[-]+>>>[-]++++++++++<[->-[>]<<]<[-<<-----
----->>>>>>>+<<<<<]<[-<]>>>]>>>[-<<<<<<+>>>>>>]<<[-]<<<++++++
[-<++++++++<++++++++>>]<.[-]<.[-]
这使用了八个单元格,这些单元格都应该用零初始化(如果您在更大的程序中使用它),并且指针从八个单元格的最左边开始。它将接收两个单个数字的 ASCII 数字并输出一个单个的两个数字的 ASCII 数字。通过 ASCII 数字,我的意思是它将接收并输出组成数字的字符的 ASCII 值。当这个程序完成时,指针将再次位于八个单元格的最左端,所有单元格都将归零。这将在正常操作中在磁带上产生的值不会低于 0 或超过 81,因此您无需担心负片或缠绕。
我发现这个非常简单的版本在第二个单元格中输出答案
++[>++<-]
这个例子将 2 乘以 2,开头和括号循环中的 +s 的数量是要相乘的数字