面试题 11:数值的整数次方

本文提供了一种不使用库函数实现数值整数次幂的方法,并通过递归提高计算效率。考虑了各种边界条件,包括指数为负和底数为0的情况。

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

一. 题目

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

代码请到我的代码库中下载 Point2Offer

二. 代码

package ween_2;

/**难度系数:***
 * 剑指offer: 数值的整数次方
 * 方法:考虑指数为负和底数为0
 * 测试用例:功能测试(指数为正,指数为负,指数为0)
 * 特殊输入测试(底数为0)
 * @author dingding
 * Date:2017-6-22 17:00
 * Declaration: All Rights Reserved!
 */
public class No11 {
    private static boolean invalidInput = false;
    public static void main(String[] args) {
        test1();
        test2();
        test3();
        test4();
    }

    //计算
    private static double power(double base,int exponent){
        invalidInput = false;
        if (equal(base,0.0) && exponent<0) {
            invalidInput = true;
            return 0.0;
        }
        int absExponent = exponent;
        if (exponent<0) {
            absExponent = -exponent;
        }
        double result = powerWithAbsExponent(base,absExponent);
        if (exponent<0) {
            result = 1.0/result;
        }
        return result;
    }

    //计算次方(使用递归方法,效率更高)
    private static double powerWithAbsExponent(double base, int absExponent) {
        if (absExponent==0) {
            return 1;
        }
        if (absExponent==1) {
            return base;
        }

        double result = powerWithAbsExponent(base, absExponent>>1);
        result *=result;
        if ((absExponent&1) == 1) {
            result*=base;
        }
//      for (int i=1;i<=absExponent;i++){
//          result*=base;
//      }
        return result;
    }

    //判断是否等于0
    private static boolean equal(double a, double b) {
        if ((a-b>-0.0000001)&&(a-b<0.0000001)) {
            return true;
        }else {
            return false;           
        }
    }

    private static void test1() {
        double result = power(2, 4);
        System.out.println(result);
    }

    private static void test2() {
        double result = power(2, -3);
        System.out.println(result);

    }

    private static void test3() {
        double result = power(0, -1);
        System.out.println(result);

    }

    private static void test4() {
        double result = power(-2, 4);
        System.out.println(result);
    }

}


有不妥当之处,麻烦告知:D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值