Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
已关闭8年。
Improve this question
编写代码以确定一个数字是否可以被3整除。如果到目前为止接收到的数字是一个可以被3整除的二进制表示形式,则该函数的输入为单个位0或1,并且输出应该为1。零。
例子:
这是基于面试问题。我要求绘制逻辑门,但是由于这是stackoverflow,因此我将接受任何编码语言。硬件实现的奖励点(verilog等)。
A部分(简单):第一个输入是MSB。
b部分(稍微难一点):第一个输入是LSB。
c部分(困难):(a)或(b)哪个更快,更小? (从理论上讲不是Big-O,而是实际上更快/更小。)现在,选择较慢/更大的一个,使其与更快/更小一样快/更小。
说明:0被三整除。
MSB的状态表:
说明:0被三整除。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
已关闭8年。
Improve this question
编写代码以确定一个数字是否可以被3整除。如果到目前为止接收到的数字是一个可以被3整除的二进制表示形式,则该函数的输入为单个位0或1,并且输出应该为1。零。
例子:
input "0": (0) output 1
inputs "1,0,0": (4) output 0
inputs "1,1,0,0": (6) output 1
这是基于面试问题。我要求绘制逻辑门,但是由于这是stackoverflow,因此我将接受任何编码语言。硬件实现的奖励点(verilog等)。
A部分(简单):第一个输入是MSB。
b部分(稍微难一点):第一个输入是LSB。
c部分(困难):(a)或(b)哪个更快,更小? (从理论上讲不是Big-O,而是实际上更快/更小。)现在,选择较慢/更大的一个,使其与更快/更小一样快/更小。
最佳答案
h
LSB的状态表:
S I S' O
0 0 0 1
0 1 1 0
1 0 2 0
1 1 0 1
2 0 1 0
2 1 2 0
说明:0被三整除。
0 << 1 + 0 = 0
。重复使用S = (S << 1 + I) % 3
和O = 1
(如果S == 0
)。MSB的状态表:
S I S' O
0 0 0 1
0 1 2 0
1 0 1 0
1 1 0 1
2 0 2 0
2 1 1 0
说明:0被三整除。
0 >> 1 + 0 = 0
。重复使用S = (S >> 1 + I) % 3
和O = 1
(如果S == 0
)。S'
与上面不同,但是O的工作原理相同,因为对于相同的情况(00和11),S'
为0。由于在两种情况下O相同,所以O_LSB = O_MSB,因此要使MSB与LSB一样短,反之亦然,请使用两者中最短的一个。关于puzzle - 检查数字是否可被3整除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/844867/
10-12 16:13