思路+代码
2026-07-29 20:15:29
发布于:广东
8阅读
0回复
0点赞
-
数学本质
每天长度减半,即求 a / 2^{n-1} = 1,得出 n = log_2(a) + 1。 -
编程处理
由于整数除法会向下取整,最稳妥的方法是模拟循环:
只要 a > 1,就不断执行 a = a / 2(或位运算 a >>= 1),同时天数加 1。 -
复杂度
因为 a < 10^9,最多只需循环约 30 次,时间复杂度 O(log a),极快且无精度问题。
#include <bits/stdc++.h>
using namespace std;
int main(){
long long a,ci;
cin>>a;
while(1==1){
ci++;
if(a==1){
break;//important!!!!!!!!!!!!!!!!!!!!
}
a=a*0.5;
}
cout<<ci;
}
十分的简单
这里空空如也






有帮助,赞一个