我想知道是否有可能只用代码开头的数字k来计算brainfuck中1 + 2 + 3 + ... + k的总和?
例如,可以像这样做1 + 2 + 3:
+++>
(此处代码创建一个两个添加三个,创建一个并添加它)
因为我可以这样做:+++>++>+[<<+>>-]<[<+>-]<
但如果k = 10000,我该怎么做?
答案 0 :(得分:4)
这是一个简单的版本。假设我们将前三个单元格命名为y
,temp0
和x
。然后我们可以在递减循环中简单地使用this算法:
+++ # Input number (in fisrt cell)
[ # loop while first cell is not 0
>[-] # if second cell is null
<[>>+<+<-] # copy first cell in second and third and decrease it to 0
>[<+>-] # move second cell in first cell
<- # decrement input
] # go to begin of while loop
>> # the current cell now has the result
请注意,由于8位限制,这仅适用于k = 22
。要输出数字或处理更大的数字,您将不得不付出额外的努力。
答案 1 :(得分:3)
,[[>+>+<<-]>-[<+>-]<]>>.
比Ingo更简洁高效的算法。使用三个&#34;插槽&#34;
| total |:累积每个循环的值
+++ input |num|
[ while |num| is non-zero
[>+>+<<-] copy |num| to |temp| and |results|
>-[<+>-] copy |temp-1| back to |num|
< reset pointer
]
>>. output |total|
相同的解释,但更详细
+++ input |num|
[ while |num| is non-zero
[ until |num| is zero
>+>+ increment |temp| and |total|
<< return to |num|
- decrement |num|
]
>- goto |temp|, decrement
[<+>-] until |temp| is zero; decrement |temp|; increment |num|
< goto |num|
]
>>. goto |total|, output it