top1编程
← 返回题目
题解

【入门】请问一个正整数能够整除几次2?

1 条题解

  • 0
    @ 2026-7-31 11:30:01

    解题思路

    题目要求数一数:一个数 n 能被 2 连续整除多少次。

    比如 8:

    • 8 能整除 2 → 8÷2=4,1 次
    • 4 能整除 2 → 4÷2=2,2 次
    • 2 能整除 2 → 2÷2=1,3 次
    • 1 不能再整除 2 了,停止
    • 答案 3

    思路:

    用 while 循环,只要 n 还是偶数(n % 2 == 0),就让它除以 2,并且计数器加 1。等 n 变成奇数(或 1)时,循环结束,输出计数器。

    为什么用 while 不用 for? 因为我们不知道到底要除多少次,循环次数不固定,用 while 最合适。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n, num = 0;
        cin >> n;
    
        // 只要 n 还能被 2 整除,就继续除以 2
        while (n % 2 == 0) {
            n = n / 2;      // n 变成原来的一半
            num = num + 1;  // 计数加 1
        }
    
        cout << num << endl;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(log N),每循环一次 n 减半
    • 空间复杂度:O(1)
    • 1