编写代码以确定一个数是否能被3整除。该函数的输入是一个单位,0或1,如果到目前为止收到的数是一个可被3整除的数的二进制表示,则输出应为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)?(理论上不是大O意义上的,但实际上更快/更小。)现在使用较慢/较大的,并使其与较快/较小的一样快/小。
发布于 2009-05-10 07:25:42
实际上,LSB方法实际上会让这件事变得更容易。在C中:
MSB方法:
/*
Returns 1 if divisble by 3, otherwise 0
Note: It is assumed 'input' format is valid
*/
int is_divisible_by_3_msb(char *input) {
unsigned value = 0;
char *p = input;
if (*p == '1') {
value &= 1;
}
p++;
while (*p) {
if (*p != ',') {
value <<= 1;
if (*p == '1') {
ret &= 1;
}
}
p++;
}
return (value % 3 == 0) ? 1 : 0;
}
LSB方法:
/*
Returns 1 if divisble by 3, otherwise 0
Note: It is assumed 'input' format is valid
*/
int is_divisible_by_3_lsb(char *input) {
unsigned value = 0;
unsigned mask = 1;
char *p = input;
while (*p) {
if (*p != ',') {
if (*p == '1') {
value &= mask;
}
mask <<= 1;
}
p++;
}
return (value % 3 == 0) ? 1 : 0;
}
就我个人而言,我很难相信其中一个会与另一个有显着的不同。
https://stackoverflow.com/questions/844867
复制相似问题