给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回
true
;否则,返回false
。整数
n
是 4 的幂次方需满足:存在整数x
使得n == 4x
bool isPowerOfFour(int n){ if(n <= 0) { return false; } int x = (int)(log2(n) / log2(4) + 1e-6); //加上一个精度,避免损失精度导致取整出错 return fabs(n - pow(4, x)) < 1e-6; //只有小于某个精度才能判断相等 }
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
bool isPowerOfTwo(int n) { if(n <=0) { return false; } int x = (int)(log2(n) + 1e-6); return fabs(n - pow(2, x)) < 1e-6; }
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x
bool isPowerOfThree(int n){
if(n <=0) {
return false;
}
int x = (int)(log2(n)/log2(3) + 1e-6);
return fabs(n - pow(3, x)) < 1e-6;
}
c语言中1e-6的意思是:
1e-6表示1乘以10的负6次方。
fbs(a-b)<1e-6其实相当于x==0
1e-6(也就是0.000001)叫做epslon,用来抵消浮点运算中因为误差造成的相等无法判断的情况。它通常是一个非常小的数字(具体多小要看你的运算误差)