zerofly's Blog

努力不一定成功,但不努力一定不会成功

0%

数值得整数次方(C++版)

刷题平台

牛客网

题目

给定一个double类型得浮点数base和int类型得整数exponent。求base得exponent次方。

解题思路

当指数为正时,就是正常得求解方法。指数为负时,则是按正值的倒数。若底数为 0 ,则直接返回 0 .

此时要注意:用计算机表示小数(float和double)都有误差,不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为他们相等。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution
{
public:
double Power(double base, int exponent)
{
if (equal(base, 0.0) && exponent == 0) // 保证base和exponent不能同时为 0
return -1;
if (equal(base, 0.0))
return 0.0;
double result = 1;
for (int i = 0; i < abs(exponent); i++)
{
result *= base;
}
if (exponent > 0)
result = result;
else
result = 1/result;
return result;
}

private:
bool equal(double num1, double num2)
{
if (num2 - num1 < 0.0000001 && (num1 - num2) < 0.0000001)
return true;
else
return false;
}
};

注意

当使用了equal()函数来判断小数是否相等时,与直接用等号(==)时,计算时间多了 1ms.(此结果只是本人自己运行的结果,不具备普遍性,仅供参考)


参考博文链接:https://cuijiahua.com/blog/2017/11/basis_12.html

文章作者:zerofly

发布时间:2020年05月20日 - 16:05

原始链接:http://zeroflycui.github.io/5ba1c33c.html

许可协议: 转载请保留原文链接及作者。