5

有人可以在编程语言brainf * ck中发布一个用于将两个一位数相乘的代码吗?

4

7 回答 7

9
,>,< 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 符号)

于 2011-04-09T20:32:26.220 回答
6

好吧,我可能没有最有效的方法来解决它,但它确实有效。我以特定的方式做事,以便它适用于所有这些

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

于 2014-11-03T05:27:49.583 回答
2

好吧,我受到第一个的启发,使它变得更简单:

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

最终的 48+ 是 bfdev 以 ascii 显示的。

于 2012-11-28T23:23:06.617 回答
1
,>,<[>[>+>+<<-]>>[<<+>>-]<<<-]>>.
于 2011-12-29T15:15:34.147 回答
0

有点难以理解,但它的工作原理

>[>>>+<<<-]>>>[>+>+<<-]>>[<<+>>-]<<<<<<[>+>+>+<<<-]>>>[<<<+>>>-]>>[-<<<[-<<+>>]<[>+>+<<-]>>[<<+>>-]<<>>>>]<[-]<<[-]<[-]<
于 2015-05-28T04:12:15.483 回答
0

我知道这是八年前发布的,但我仍然想分享我的答案,以防其他人偶然发现这个帖子。

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

这使用了八个单元格,这些单元格都应该用零初始化(如果您在更大的程序中使用它),并且指针从八个单元格的最左边开始。它将接收两个单个数字的 ASCII 数字并输出一个单个的两个数字的 ASCII 数字。通过 ASCII 数字,我的意思是它将接收并输出组成数字的字符的 ASCII 值。当这个程序完成时,指针将再次位于八个单元格的最左端,所有单元格都将归零。这将在正常操作中在磁带上产生的值不会低于 0 或超过 81,因此您无需担心负片或缠绕。

于 2019-06-14T16:18:16.773 回答
-1

我发现这个非常简单的版本在第二个单元格中输出答案 ++[>++<-] 这个例子将 2 乘以 2,开头和括号循环中的 +s 的数量是要相乘的数字

于 2021-11-18T00:33:58.453 回答