问题描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27 输出: true
示例 2:
输入: 0 输出: false
示例 3:
输入: 9 输出: true
示例 4:
输入: 45 输出: false
提交代码思路:递归判断n/3是否是3的幂次方,提交代码如下:
bool isPowerOfThree(int n) {
if(n==1)
{
return true;
}
else if(n==0 || n/3*3!=n)//n不是3的倍数
{
return false;
}
else if (n==3)
{
return true;
}
return isPowerOfThree(n/3);
}
不使用递归或循环的思路:先计算最大的3的幂次方的数,然后判断n能否被最大3次幂整除即可。
bool isPowerOfThree(int n) {
if(n<=0)
{
return false;
}
int max3Power=(int)pow(3,(int)(log(0x7fffffff)/log(3)));
if (max3Power%n==0)
{
return true;
}
else
{
return false;
}
}