面试题(十六)数值的整数次方

本文介绍了一个不使用库函数实现幂运算的方法。通过自定义函数计算任意实数的整数次幂,特别处理了0的0次方及0的负指数次方等特殊情况,并通过优化提升了计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

思路:主要是要注意0的0次方在数学上无意义,同时0的负数次方是非法的。要做好这些情况的处理。

代码(已在牛客网AC):

public class Solution {
    //设置全局变量以标识出无意义的情况
    boolean valid = true;

    public double Power(double base, int exponent) {
        if(base == 0.0 && exponent <= 0)
        {
            //此时无意义
             valid = false;
             return 0.0;
        }

        double result = 1.0;
        if(exponent > 0)
            result = power(base, exponent);
        else{
            result = 1/power(base, -exponent);
        }
        return result;

  }

    private double power(double base, int exponent){
        double result = 1.0;
        for(int i = 0 ; i < exponent; i++)
            result*=base;
        return result;
    }
}

改进:power函数计算base的整数次方的效率可以通过利用平方计算进行提升。改进后的power函数如下:

 private double power(double base, int exponent){
       if(exponent == 0)
           return 1.0;
       if(exponent == 1)
           return base;

       double result = power(base, exponent >>1);
       result*=result;
       if((exponent & 0x1)== 1)
           result*=base;
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值