题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。(看到剑指上说这题不要求考虑大数问题,即不用考虑接近无穷大的数)
解题思路:这个题在剑指Offer上的第三章高质量的代码,代码的完整性,上面讲到对于一个要求解的题,我们要从分考虑可能的输入,只有可能输入的用例考虑周全了,写出的代码才具备完整的功能以应对各种非法输入。要从功能测试、边界测试和负面测试三个方面设计测试用例。因此,自己也对这个题各种考虑。写出了如下的解。
解题代码:
1. 自己实现的
class Solution {
public:
double Power(double base, int exponent) {
if(base==0)
return 0;
if(exponent==0)
return 1;
int N=abs(exponent);
int res=1;
for(int i=0;i<N;i++)
res*=base;
return exponent>0 ? res : double(1)/res;//刚开始这里没有加double,测试用例仅通过40%
}
};
注:这里其实还有一个问题。就是double型 数据不能直接用 == 来判断是否相等。
应该用equal(base,0.0) 或者我们可以首先定义一个精度,当差值小于这个精度,就可以认为两者相等。
精度由计算过程中需求而定。比如一个常用的精度为1e-6.也就是0.000001.所以对于两个浮点数a,b,如果要比较大小,那么常常会设置一个精度如果fabs(a-b)<=1e-6,那么就是相等了。 fabs是求浮点数绝对值的函数。类似的判断大于的时候,就是if(a>b && fabs(a-b)>1e-6)。判断小于的时候,就是if(a<b&&fabs(a-b)>1e-6)。
具体可以参见博客 https://blog.csdn.net/liujian20150808/article/details/50630546
#include<cstdio>
#include<cmath>
const double esp = 1e-6;
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
if(fabs(a - b) <= esp)
printf("ok\n");
else
printf("no\n");
return 0;
}
2.Better Solution
知识扩展:
1. C/C++中取绝对值的函数abs()包含于头文件 #include<cmath>中,这里要注意,在笔试的时候不要忘了这个头文件。
2. 关于C/C++中的除法运算,要区分 int 型 和 double 型。int 型的 1/4 = 0; double 型的 1/4=0.25.