如何在Brainfuck中将3位数增加1? 例如。获得699这个代码的用户输入应该输出700。
这是我尝试过但不起作用的东西。
,>,>,+
<<.>.>.
答案 0 :(得分:1)
它不起作用的原因是因为内存中没有3位数字。您有48-57的三个ASCII值(字符0
- 9
)。我将解释如何做你需要的,但不会提供实际的BF代码进行乘法等,你可以在其他地方找到。
让我们调用字符X
,Y
和Z
首先,我们需要将它们转换为0到9之间的数字。假设用户只输入数字,我们可以通过从ASCII值中减去48(ASCII字符0
)来实现。
好的,现在我们有0-9的三个数字如下:
A = X - 48
B = Y - 48
C = Z - 48
问题是它们仍然是三个独立的数字而不是一个数字。实际数字是多少?在这种情况下,可以通过以下方式构建数字:
N = 100A + 10B + C
因此,您需要将A
乘以100,将B
乘以10,将C
乘以1,然后将它们全部加在一起。可以按如下方式完成:
N = A
N = (N * 10) + B
N = (N * 10) + C
完成后,您在一个单元格中有一个实际数字,并且您可以通过执行N = N + 1
来增加它,其中BF是单个+
现在这适用于最大255的数字,这是BF单元可以容纳的最大数字。你想使用更大的数字吗?它变得更加复杂,因为现在你必须将这个数字分成两个或更多的单元格,自己传播进位等等。我不会在这里进行,因为它变得更加复杂(尽管你可以在线找到算法)也有帮助)我认为这足以让你开始。
编辑:我意识到你的代码也试图打印递增的值。这需要更多工作,因为.
命令将该单元格的值输出为ASCII字符。但是你需要输出三位数。要做到这一点,你需要颠倒上面的过程,将数字分成三个数字,如下所示:
C = N % 10
N = N / 10
B = N % 10
N = N / 10
A = N
然后您需要再次将它们从0-9转换为ASCII字符,如下所示:
X = A + 48
Y = B + 48
Z = C + 48
然后最后你可以按顺序输出字符X,Y和Z,这将是人类可读的递增数字。