-3

我有一个挑战是用 Brainfuck 语言编写混淆代码来执行以下操作:

对于给定的数字 n 输出其最后一位数字。

输入

输入将仅包含一行,其中只有一个整数 n ( 1 < = n < = 2,000,000,000 ),后跟换行符 '\n' (ASCII 10)。

输出

在输出上,必须找到一个整数,表示 n 的最后一位。

示例我输入:32 输出:2

例子二:输入:231231132 输出:2

这是我尝试过的,但没有奏效:

+[>,]<.>++++++++++.
4

1 回答 1

3

问题是您告诉循环在输入为 0 时终止。

输入永远不会是 0,换行符的 ASCII 是 10,所以这就是您需要使用的。

这段代码应该可以工作。实际上,这段代码根本不关心你是否给它一个数字,它只是返回它找到的第一个换行符之前的最后一个字符。

+[     // increment [1] by 1 and enter the loop
  ,[     // read input to [1] and enter another loop
     >+>+<<-     // copy the initial input twice whilst decrementing the original
  ]
  >>>++++++++++     // write 10 (for newline) and enter a loop
  [
    <->-     // decrement the 10 counter and one of the copied inputs
  ]
< step back to the (input - 10) cell
]<<<.     // if (input - 10 == 0) then you just read a carriage return! yay! Step back by three to the last stored input and print it out to the console.
于 2015-10-15T14:53:40.537 回答