第42996题 程序题
找公共“1”位

图片

图片

【题目描述】

小杨有两个正整数a 和b。他想知道这两个数的二进制表示中,哪些位置上的数字都是1。

二进制位从右往左编号为第0位、第1位、第2位……

如果一个数的二进制位数比较少,那么它左边缺少的高位都当作0。

小知识:二进制就是只用0 和1 来表示一个数。我们可以用“除以2取余数”的方法来得到它的二进制。

举个例子:把13变成二进制

  • 13 ÷ 2 = 6…… 余1(这是最低位,即第0位)
  • 6 ÷ 2 = 3…… 余0(第1位)
  • 3 ÷ 2 = 1…… 余1(第2位)
  • 1 ÷ 2 = 0…… 余1(第3位)

把余数从下往上写:1101,这就是13的二进制。

注意:我们是从右往左编号的,所以第0位是最右边的那个1,第1位是0,第2位是1,第3位是1。

再试一个:把7变成二进制

  • 7 ÷ 2 = 3…… 余1(第0位)
  • 3 ÷ 2 = 1…… 余1(第1位)
  • 1 ÷ 2 = 0…… 余1(第2位)

结果是111,也就是第0、1、2位都是1,第3位以上都是0(因为左边高位不足,自动补0)。

默认小猫角色和白色背景,请你帮小杨计算一下:一共有多少个二进制位,在两个数中同时是1?把结果存储在变量ans中。

【输入描述】

新建变量“a”,表示第一个正整数。

新建变量“b”,表示另一个正整数。

($1 \le a, b \le 1000$,这样二进制最多只有10位,方便计算)

如下图所示:

图片

【输出描述】

新建变量“ans”,用于存储最后的结果(满足条件的二进制位的个数)。

如下图所示:

图片

【样例1】

输入:

a = 13
b = 7

输出:

ans = 2

【样例解释1】

  • 13的二进制是1101(从右往左:第0位=1,第1位=0,第2位=1,第3位=1)
  • 7的二进制是0111(第0位=1,第1位=1,第2位=1,第3位=0,因为7只有3位,第3位补0)
  • 共有2 个位(第0位和第2位)在两个数中都是1,所以答案是2。

【样例2】

输入:

a = 8
b = 4

输出:

ans = 0

【样例解释2】

  • 8的二进制:1000(第3位=1,其余为0)
  • 4的二进制:0100(第2位=1,第3位补0)
  • 没有一位同时是1,答案为0。

【注意事项】

  1. 变量名的拼写(包括大小写)要和题目完全一致(建议直接从题目中复制变量名,避免自己打字时弄错大小写或拼写)。
  2. 输入变量直接赋值即可,无需使用“询问并等待”积木块。
  3. 输出结果存放在对应变量中即可,无需使用“说…”或“说…,2秒”积木块。
{{ option.label }}
子题{{ index + 1 }} {{ child.type_label }}
{{ option.label }}
✓ 正确 ◐ 部分正确 ✗ 错误
编辑模式
程序运行统计
暂无判题统计
知识点:
提交{{ questionInfo.stats ? questionInfo.stats.submit_count : 0 }}次 正确率{{ statsAccuracy }}%
答案解析