在Brainfuck中将数字乘以2?

时间:2012-07-16 03:49:18

标签: brainfuck

给定一个任意长的数字,我该如何输出它的双数?只要结果<10,我就知道如何将小数加在一起,但是像32984335这样的较大整数怎么样,加倍这样的东西呢?我不知道处理这样的事情的正确方法。

4 个答案:

答案 0 :(得分:5)

这是您需要实施的算法:

  1. 以0开始当前计数;
  2. 将当前计数乘以10:这可以通过啜饮10次,然后将所有傻瓜加在一起来实现;
  3. 读一个数字;
  4. 如果为null则转到8;
  5. 将其转换为实际数字:这可以通过减去48;
  6. 来实现
  7. 将其添加到当前计数;
  8. 继续2;
  9. 复制当前计数;
  10. 将骰子加在一起;
  11. 使用重复减法除以10;保持商数和余数;
  12. 抓住剩下的部分;
  13. 将其设为数字​​(添加48);
  14. 打印;
  15. 抓住10的商数;
  16. 如果不是零,请转到10;
  17. 结束。
  18. 所有这些步骤都由basic brainfuck idioms组成,因此应该很容易实现。

答案 1 :(得分:0)

这是一个开始。它将乘以一个字节的输入,但我认为你可以建立它以使其适用于任何数字。基本上,你接受一个数字,并将数字存储在下一个指针中乘以(2)。你循环递减第一个数字,然后嵌套一个循环递减第二个数字;在内部循环的每次迭代中,将指针递增到第二个操作数的右侧。这是你的结果。

,      take input to ptr 0
  [
     -     decrement first operand (input)
     >++   number to multiply by (2) at ptr 1
     [
        >+   result in ptr 2
        <-   decrement second operand (2)
     ]
     <
  ]
>>     move to result

答案 2 :(得分:0)

这是我的BF代码:http://ideone.com/2Y9pk8

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

它读取每行中的每个数字直到EOF,并将所有数字乘以2 ..

答案 3 :(得分:0)

以下是将数字乘以2的代码。

,[&GT; ++&LT; - ]&GT;

希望这有帮助。