题目:
求一个数是否是二的整数次幂,如果是,输出YES,否者输出NO
一行,一个正整数n
一串字符串,表示是否符合条件
4
YES
6
NO
数据可能很大,请用时间复杂度为O(1)的代码通过
n≤1020
为什么我用o(logn)和用o(n)都是700ms,超时了。
不过这道题是我出的,我当然想让别人tle
我主要是不知道为什么两种方式用时是一样的:
o(n)
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
long long ans=1;
cin>>n;
while(1)
{
if(ans>n)
break;
if(ans==n)
{
cout<<"YES\n";
return 0;
}
ans*=2;
}
cout<<"NO";
return 0;
}
o(logn)
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin>>n;
long long ans=sqrt(n);
while(1)
{
if(ans>n)
break;
if(ans==n)
{
cout<<"YES\n";
return 0;
}
ans<<=1;
}
cout<<"NO";
return 0;
}