剑指Offer面试题16:数值的整数次方

题目描述

给定一个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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值