231_2的幂
/*给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 2^{0} = 1
示例 2:
输入: 16
输出: true
解释: 2^{4} = 16
示例 3:
输入: 218
输出: false
*/ /*方法1:笨办法计算二进制数中1的个数,不为1个不是*/
bool isPowerOfTwo(int n)
{
int num_1 = 0;
int i = 0;
if(n <= 0)
{
return false;
}
else
{
for(i = 0 ; i < 31 ; i++)
{
if((n>>i)&0x01)
{
num_1++;
}
if(num_1>1)
{
break;
}
}
return (num_1 == 1);
}
}
/*
方法1:
执行用时 :0 ms, 在所有 C 提交中击败了100.00%的用户
内存消耗 :6.9 MB, 在所有 C 提交中击败了5.02%的用户
*/
/*方法2:利用借位性质,去掉一个1后数据是不是0*/
bool isPowerOfTwo(int n)
{
if(n <= 0)
{
return false;
}
else
{
return (n&(n-1)) == 0;
}
}
/*
方法2:
执行用时:8 ms, 在所有 C 提交中击败了75.77%的用户
内存消耗 :6.8 MB, 在所有 C 提交中击败了11.42%的用户
*/
奇怪,这方法应该花费时间更少才对。
页:
[1]