我们熟悉的是十进制数,十进制数的特点是逢十进一,即每数到10 个数就向前进一位。在编程中,我们经常使用二进制,二进制数的特点是逢二进一,二进制数只包含 0 和 1。 A. 编写一个函数,函数名字是 getHowManyZero,参数列表包含两项n 和k,返回 1 到 n 中有多少个数满足其二进制表示中恰好有 k 个0 B. 编写一个测试程序,提示用户输入正整数 N 和 K,调用函数getHowManyZero() 并输出该函数的返回值 [输入示例] Input Sample: N: 7 K: 2 [输出示例] Output Sample: 1
时间: 2024-03-18 07:41:22 浏览: 14
以下是Python代码实现:
```python
# 计算一个整数的二进制中0的个数
def countZero(n):
cnt = 0
while n > 0:
if n % 2 == 0:
cnt += 1
n //= 2
return cnt
# 计算1到n中二进制中恰好有k个0的数的个数
def getHowManyZero(n, k):
cnt = 0
for i in range(1, n+1):
if countZero(i) == k:
cnt += 1
return cnt
# 测试程序
N = int(input("请输入正整数 N:"))
K = int(input("请输入正整数 K:"))
print("1到", N, "中二进制中恰好有", K, "个0的数的个数为:", getHowManyZero(N, K))
```
如果用户输入N=7,K=2,则程序输出:
```
请输入正整数 N:7
请输入正整数 K:2
1到 7 中二进制中恰好有 2 个0的数的个数为: 1
```
这是因为,1到7中,只有数字6的二进制表示中恰好有2个0,其他数字的二进制表示中0的个数不是2个。
相关问题
将任意一个十进制数转化成二进制数按位存放到数字中然后输出
好的,我可以为您编写一个将十进制数转化为二进制数的程序,以下是示例代码:
```
#include <iostream>
using namespace std;
int main() {
int num;
cout << "请输入一个十进制数:";
cin >> num;
int binary[32], i = 0;
while (num > 0){
binary[i] = num % 2;
num = num / 2;
i++;
}
cout << "转化后的二进制数为:";
for (int j = i - 1; j >= 0; j--)
cout << binary[j];
cout << endl;
return 0;
}
```
您可以将任意十进制数输入,程序会将其转化为二进制数并输出。希望能够帮到您!
如何把一个二进制数对应十进制十位个位分开
可以使用以下步骤将一个二进制数分开为十位和个位的十进制数:
1. 将二进制数从右往左数,将每一位的值依次乘以2的幂次方,幂次方从0开始,每次增加1。
2. 将计算出的结果累加,得到该二进制数对应的十进制数。
3. 对十进制数进行取余运算,得到个位数。
4. 将十进制数除以10并向下取整,得到十位数。
举个例子,对于二进制数1101,可以按照以下步骤计算:
1. 1 x 2^0 + 0 x 2^1 + 1 x 2^2 + 1 x 2^3 = 1 + 0 + 4 + 8 = 13
2. 13 % 10 = 3,所以个位数为3。
3. floor(13 / 10) = 1,所以十位数为1。