模拟卷一位运算阅读与完善程序

阅读程序,回答问题(统计二进制 1 的个数)。

阅读与完善程序 阅读3 · CSP-S 提高级 初赛 模拟试卷(一)
#include <iostream>
using namespace std;
int countBits(int x) {
    int c = 0;
    while (x) { x &= (x - 1); c++; }
    return c;
}
int main() {
    int n = 15, ans = 0;
    for (int i = 1; i <= n; i++) ans += countBits(i);
    cout << ans << endl;
    return 0;
}
  • (1) 函数 countBits(x) 的功能是______。(5 分)
  • (2) 当 n = 15 时,程序输出结果是______。(5 分)
  • (3) 该函数的时间复杂度与 x 的什么有关?请简要说明。(4 分)
答案解析
(1)统计整数二进制表示中 1 的个数。(2)1~15 各数二进制 1 的个数之和 = 1+1+2+1+2+2+3+1+2+2+3+2+3+3+4 = 32。(3)与 x 中"1 的个数"成正比(每次消一个 1),最坏 O(log x)。

同知识点练习

本题收录于「CSP-S 提高级 初赛 模拟试卷(一)」,共 25 道题,全部提供答案与解析。可进入在线练习系统按知识点随机组卷、自动批改并归集错题。

进入在线练习 查看完整试卷 本类全部题目