今天 在 写 二叉树 的 顺序存储方式时,遇到了 一个数学问题。
已知,节点数 为 n 的 完全 二叉树的 深度 k 为 : k = log2 N + 1,log2N向下取整。查了 一下 C 里 math.h 只有 log 和 log10 的函数。log 是 以 e 为底数, log10 是以 10 为底数,那怎么 求 以2为底的树呢?
百度了 一下 才 知道 log2n = In(N) / In(2) ,In 是 以 e 为底数的,其值是2.71828...,用到了对数的 换底公式。
数学学的好,对于 一个软件开发人员是很重要的。哎。。上网查了一下,对数的其他公式,以便以后 温故。
1、
2、
3、
4、
5、
换底公式
下面上代码:
// log2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
int result = log(16.0)/log(2.0);
printf("%d",result);
return 0;
}
输出: 4
参考网址:
点击打开链接