题解
【入门】请问一个正整数能够整除几次2?
1 条题解
-
0
解题思路
题目要求数一数:一个数 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