14200. [GESP202609 四级 Scratch] 26. 找公共“1”位

Scratch 编程 · 满分 25 分

[GESP202609 四级 Scratch] 26. 找公共“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 ≤ a, b ≤ 1000,这样二进制最多只有 10 位,方便计算)

如下图所示:

原卷图示

【输出描述】

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

如下图所示:

原卷图示

【输入样例1】

a = 13
b = 7

【输出样例1】

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

【输出样例2】

ans = 0

【样例解释2】

  • 8 的二进制:1000(第3位=1,其余为0)

  • 4 的二进制:0100(第2位=1,第3位补0)

  • 没有一位同时是1,答案为0。

注意事项:

1.变量名的拼写(包括大小写)要和题目完全一致(建议直接从题目中复制变量名,避免自己打字时弄错大小写或拼写)。

2.输入变量直接赋值即可,无需使用“询问并等待”积木块。

3.输出结果存放在对应变量中即可,无需使用“说…”或“说…,2 秒”积木块。

我的作品

在编辑器中完成积木,提交后查看结果。

历史提交