题意理解
给定一个数,问是不是3的幂
问题分析
方法1:利用公式3^n = 3 × 3 × ... * 3
方法2:利用计算机值表示范围,计算int类型计算机表示范围内最大的幂,利用公式log(int_max)/log(3),c++不支持任意底的对数。这里用换底公式计算。将对数下取整作为指数,求出最大的幂。
如果n能整除这个最大的幂,那么n就是3的幂。
复杂度为O(1)
其他
C++算术运算公式了解不多
pow(底,指数)
log(数),以e为底的对数
INT_MIN,int类型最小值
INT_MAX,int类型最大值
fixed,将科学计数法转化为十进制显示
链接
bool isPowerOfThree(int n) {
//cout << log (INT_MAX) /log(3) << endl; //19.5588 //幂的换底公式计算幂指数
//cout << fixed << pow(3, 19) << endl; //1162261467.000000 //最大3的幂
return (n > 0) && (1162261467 % n == 0); //如果n是3的幂必定能整除最大3的幂。
}
bool isPowerOfThree(int n) {
if (n <= 0) return false; //小于0,非幂
if (n == 1) return true; //等于1,幂
for(;;) //大于1
{
while(n % 3 == 0) //一直能被3整除,直到商等于1
{
n = n / 3;
if (n == 1)
return true;
}
return false; //否则,非幂
}
}