首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查一个数字是否能被3整除

检查一个数字是否能被3整除
EN

Stack Overflow用户
提问于 2009-05-10 07:22:00
回答 7查看 55.3K关注 0票数 19

编写代码以确定一个数是否能被3整除。该函数的输入是一个位,0或1,如果到目前为止收到的数是一个可被3整除的数的二进制表示,则输出应为1,否则为零。

示例:

代码语言:javascript
运行
复制
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意义上的,但实际上更快/更小。)现在使用较慢/较大的,并使其与较快/较小的一样快/小。

EN

Stack Overflow用户

发布于 2009-05-10 07:25:42

实际上,LSB方法实际上会让这件事变得更容易。在C中:

MSB方法:

代码语言:javascript
运行
复制
/* 
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方法:

代码语言:javascript
运行
复制
/* 
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;
}

就我个人而言,我很难相信其中一个会与另一个有显着的不同。

票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/844867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档