如何在 Brainfuck 中将 3 位数字(用户输入)增加 1?

How to Increment a 3 digit Number(User Input) by 1 in Brainfuck?

如何在 Brainfuck 中将 3 位数字加 1? 例如。获取 699 的用户输入此代码应输出 700。

这是我尝试过的方法,但它不起作用。

,>,>,+
<<.>.>.

它不起作用的原因是你的内存中没有 3 位数字。您有 48-57 之间的三个 ASCII 值(字符 0-9)。我将解释如何做你需要做的事情,但不会提供乘法等的实际 BF 代码,你可以在别处找到这些代码。

我们称这些字符为 XYZ

首先我们需要将它们转换为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。