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

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0

题目比较简单,但是需要全面考虑问题,主要是对幂次进行分类,

1. exponent > 0

这种情况只需要进行常规操作,无需特殊处理

2. exponent = 0

当 base = 0 时,无意义,题目要求不存在此情况
当 base < 0 时,结果为1
当 base > 0 时,结果为1

3.exponent < 0

需要对exponent取相反数,计算结果取倒数
当 base = 0 时,无意义,比如 0^(-2),相当于分母为0,此时需要特殊处理
其他情况,无特殊处理

综上所述,只需要对 base = 0 且 exponent < 0 的情况进行异常处理即可。

程序源码

在计算幂次方函数PowerCore()中,利用递归方法求解

class Solution {
public:
    double Power(double base, int exponent) 
    {
        //输入无效 没有用全局变量指示
        if(base==0 && exponent<0)
            throw "Invalid Input";
        
        if(exponent == 0)
            return 1.0;
        else if(exponent > 0)
            return PowerCore(base,exponent);
        else
            return 1/PowerCore(base,-exponent);
    }
    double PowerCore(double base, unsigned int exponent)
    {
        //递归出口
        if(exponent == 1)
            return base;
        
        int result;
        result = PowerCore(base,exponent>>1);//用右移代替“/” 速度更快
        result = result * result;
        //取余判断奇偶数操作可以用 exponent&0x1 == 1 替代 速度更快
        if(exponent%2 == 1)
            result = result * base;
        
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值