给定一个数字 N,我们的任务是编写一个 C 程序来求出该数字 N 的 平方根。
示例:
> 输入: N = 12
> 输出: 3.464102
>
>
>
>
>
> 输入: N = 16
> 输出: 4
方法 1:使用内置 sqrt() 函数: sqrt() 函数返回任意数字 N 的平方根。
下面是上述方法的实现:
C
CODEBLOCK_6af30073
输出:
3.464102
时间复杂度:O(logN),因为内置的 sqrt() 函数耗时为 log(n)
辅助空间:O(1)
方法 2:使用 二分查找: 这种方法用于查找给定数字 N 的平方根,精度可达 5 位小数。
- 数字 N 的平方根位于 0 ? squareRoot ? N 的范围内。初始化 start = 0 和 end = number。
- 比较 mid 整数的平方与给定的数字。如果相等,那么我们就找到了整数部分,否则根据条件在 mid 的左侧或右侧查找。
- 找到整数部分后,我们将查找小数部分。
- 用 0.1 初始化增量变量,并迭代计算小数部分,直到 5 位小数。
- 在每次迭代中,将增量更改为其前一个值的 1/10。
- 最后,返回计算出的答案。
下面是上述方法的实现:
C
CODEBLOCK_d9bb7038
输出:
3.464099
方法 3:使用 log2(): 可以使用 log2() 计算数字 N 的平方根,公式如下:
> 设 d 为输入数字 N 的答案,则
>
>
>
>
>
> d = N^{\frac{1}{2}}
>
>
>
>
>
> 两边同时应用 log2()
>
>
>
>
>
> log2(d) = log2(N^{\frac{1}{2}})
>
>
>
>
>
> log2(d) = {\frac{1}{2}}*log2(N)
>
>
>
>
>
> d = 2^{{\frac{1}{2}}*log2(N)}
>
>
>
>
>
> 因此,
>
>
>
>
>
> d = pow(2, 0.5*log2(n))
下面是上述方法的实现:
C
CODEBLOCK_01ae2c9f
输出:
3.464102