2011-03-02 47 views
3

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

+0

@戈登:具有讽刺意味的是,如果答案可以在维基百科上找到,那么这个问题似乎很难被视为“过于本土化”。 – 2011-03-02 10:04:44

+0

@Cody虽然SO绝对是“请问在编程语言y中如何做x”的正确场所我不认为像BF这样的深奥语言符合“适用于网络的全球受众” – Gordon 2011-03-02 10:14:04

回答

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解释其中I可以输入数字作为编号(未ASCII符号)

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

这将乘以ASCII值,而不是实际值。用这个代码,'1'*'1'= 49 * 49 = 2401,假设有8位单元格,则会导致2401%256 = 97. 97显然不等于1 * 1。您应该减去48 ascii代码为'0')从字符中获取实际值。像这样: ,> ++++++ [<--------> - ],> ++++++ [<--------> - ] <<[> [> +> + <<-]>> [<<+>> - ] <<<-]>>。 – 2012-12-10 09:55:36

2

好,我被第一个鼓舞,它更简单:

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

的48+到底是为bfde v以ascii显示。

5

那么,我可能没有最有效的方法,但它的工作原理。我做的事情在一个特定的方式,使得其将与所有的工作这些

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

+0

现在_this_是可以用于ASCII输入的答案。 – Ruslan 2015-09-28 10:32:03

+0

酷,在我的翻译工作得很好 – WPMed 2018-02-26 21:38:45

0

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

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