《算法零基础100讲》(第1讲) 幂和对数

跟着英雄学算法打卡第一天

1
2
3
4
5
6
7
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为底的更好计算

力扣题

. 2 的幂

给你一个整数 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

1
2
3
4
5
6
7
8
9
10
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的幂次方

1
2
3
4
5
6
7
8
9
10
11
12
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;
}

}

《算法零基础100讲》(第1讲) 幂和对数
http://example.com/2021/11/15/《算法零基础100讲》(第1讲) 幂和对数/
作者
Zevin
发布于
2021年11月15日
许可协议