#include<bits/stdc++.h>/*#include <stdio.h>
#include <algorithm>
#include<iostream>
#include <stdlib.h>*///#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
typedef long long ll;const int maxn=1e6+50;const int N=1e6+5;const ll mod =1e9+7;const int inf=2e9+7;
int a[25];
int main(){
ll n;scanf("%lld",&n);
ll i=0;while(n>=pow(2,i)){if(n<pow(2,i+1)){printf("%lld\n",i+1);return0;}
i++;}}
不解的是,我第一次用的是位运算超时了,pow函数却过了。
超时代码
#include<bits/stdc++.h>/*#include <stdio.h>
#include <algorithm>
#include<iostream>
#include <stdlib.h>*///#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
typedef long long ll;const int maxn=1e6+50;const int N=1e6+5;const ll mod =1e9+7;const int inf=2e9+7;
int a[25];
int main(){
ll n;scanf("%lld",&n);
ll i=0;while(n>=(1ll<<i)){if(n<(1ll<<(i+1))){printf("%d\n",i+1);return0;}
i++;}}