-
2的幂
- 题目描述
给定一个整数,编写一个函数来判断它是否是2的幂次方。
- 思路
给定一个二进制数(例如1100),将该数减1为1011,将这两个数按位“与”,即1100&1011得到的结果为1000。总结该规律得到:设存在数n,那么n&(n-1)的结果相当于将n对应的二进制数最右边的1变为0;
再来看2的幂次方在二进制上的规律:若某个数是2的幂次方,那么其2进制表示中就只会存在1个1,其余均为0;
分析上面的结果,如果对于某个数n,如果该数是2的幂次方,那么使用n&(n-1)去掉其最右端的1后必为0,否则为1;
- C++实现
bool isPowerOfTwo(int n) { if(n<=0)return false; return (n&(n-1))==0; }
-
3的幂
- 题目描述
给定一个整数,编写一个函数来判断它是否是3的幂次方。
- 思路
如果n是3的幂次方法,那么必然是一个整数,为了方便计算有
- C++实现
bool isPowerOfThree(int n) { double tem = log10(n) / log10(3); return (tem - (int)(tem)) == 0?true:false; }
- 4的幂
- 题目描述
给定一个整数,编写一个函数来判断它是否是4的幂次方。
- 思路
首先如果一个数是4的幂次方,那么它一定是2的幂次方。其次,如果一个数是4的幂次方,该数的二进制表示中有且仅有一个1,而且这个1在奇数位置上。
- C++实现
bool isPowerOfFour(int num) { if(num<0||num&(num-1))return false;//判断是否是2的幂次方 return num&0x55555555;//如果奇数位上没有1则结果为0 }