跟着英雄学算法打卡第一天
bool isPowerOfFour(int n){
if(n == 0) {
return false; // (1)
}
int x = (int)(log2(n) / log2(4) + 1e-8); // (2)
return fabs(n - pow(4, x)) < 1e-8; // (3)
}
bool类型是用来判断真假的,true为1,false为0
1.n=0为特殊情况
2.换底公式,并且加上一个精度,避免精度缺失导致取整错误
3.浮点数的相等判定
对数和幂
若判断一个数是否为4的对数 n=4^x
即x=log4(n);可以使用fabs来判断,由于fabs是判断小数的绝对值,如果两数相等,
则fabs(a-b)<1e-8;即小于一个无穷小,a和b两个数相等
换底公式中用2为底和以10为底的更好计算
力扣题
给你一个整数
n
,请你判断该整数是否是 2 的幂次方。如果是,返回true
;否则,返回false
。如果存在一个整数
x
使得n == 2x
,则认为n
是 2 的幂次方。示例 1:
输入:n = 1 输出:true 解释:20 = 1示例 2:
输入:n = 16 输出:true 解释:24 = 16示例 3:
输入:n = 3 输出:false示例 4:
输入:n = 4 输出:true示例 5:
输入:n = 5 输出:false
bool isPowerOfTwo(int n){
if(n==0)
return false;
else
{
int x=(int)(log2(n)+1e-8);
return fabs(n-pow(2,x))<1e-8;
}
}
3的幂次方
bool isPowerOfThree(int n){
if(n==0)
{
return false;
}
else
{
int x=(int)(log2(n)/log2(3)+1e-8);
return fabs(n-pow(3,x))<1e-8;
}
}