2011-03-02 85 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

有點兒難以理解,但它的工作原理

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