在Brainfuck中将两位数字相乘的代码

时间:2011-03-02 09:52:29

标签: brainfuck

有人可以在编程语言brainf * ck中发布一个代码段来乘以两位数字吗?

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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

答案 2 :(得分:2)

好吧,我受到了第一个的鼓舞,并且让它变得更加简单:

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

最后48+是为了让bfdev在ascii中显示它。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

有点难以理解,但它有效

  

[&GT;&GT;&GT + LT;&LT;&LT; - &GT;&GT;&GT; [&GT + GT + LT;&LT; - &GT;&GT;并[d 1 +&GT; &GT; - ]&LT;&LT;&LT;&LT;&LT;&LT; [&GT + GT + GT + LT;&LT;&LT; - &GT;&GT;&GT;并[d&LT; 1 +&GT; &GT;&GT; - &GT;&GT; [ - &LT;&LT;&LT; [ - &LT; 1 +&GT;&GT]的百分比抑制率&GT + GT + LT;&LT; - &GT;&GT; [ &LT; 1 +&GT;&GT; - ]&LT;&LT;&GT;&GT;&GT;&GT;]&LT; [ - ]&LT;&LT; [ - ]&LT; [ - ]&LT;

答案 5 :(得分:0)

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

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

这使用八个单元格的空间,所有这些单元格都应初始化为零(以防您在较大的程序中使用此空间),并且指针从八个单元格的最左侧开始。它将接受两个单位ASCII数字,并输出一个单两位数字ASCII数字。用一个ASCII数字,我的意思是它将接受并输出组成该数字的字符的ASCII值。完成此程序后,指针将再次位于八个单元格的最左端,并且所有单元格都将返回零。在正常操作下,在磁带上产生的值不会低于0或不会超过81,因此您不必担心底片或绕线。