剑指offer面试题11 数值的整数次方

来源:互联网 发布:godaddy域名转移 编辑:程序博客网 时间:2024/06/07 16:28

一、题目

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

二、思考分析

题目不需要考虑大数问题,看似很简单,但是需要考虑全面,并且提高效率,才是面试官想要看到的结果。

需要考虑的情况 :
* 指数(exponent)等于零时;
* 指数(exponent)为正数时;
* 指数(exponent)为负数时;
* 底数(base)为零,指数也为零时;

package com.offer.jianzhi;public class DoublePower {    // 方法一:考虑全面    public double power(double base, int exponent) {        double result = 0.0;        if (exponent == 0) {            return 1.0;        }        if (base == 0.0) {            return result;        }        if (exponent < 0) {            result = 1.0 / cal(base, -exponent);        } else {            result = cal(base, exponent);        }        return result;    }    public double cal(double base, int exponent) {        double d = 1.0;        for (int i = 0; i < exponent; i++) {            d = d * base;        }        return d;    }    // 方法二:提高效率    public double power2(double base, int exponent) {        double result = 0.0;        if (exponent == 0) {            return 1.0;        }        if (base == 0.0) {            return result;        }        if (exponent < 0) {            result = 1.0 / powerWithUnsignedExponent(base, -exponent);        } else {            result = powerWithUnsignedExponent(base, exponent);        }        return result;    }    public double powerWithUnsignedExponent(double base, int exponent) {        if (exponent == 0) {            return 1.0;        }        if (exponent == 1) {            return base;        }        double d = powerWithUnsignedExponent(base, exponent >> 1);// exponent>>1表示除以2        d *= d;        if ((exponent & 0x1) == 1) {// 判断exponent是否为奇数            d *= base;        }        return d;    }    public static void main(String[] args) {        double a = Math.pow(3, 32);// 使用库函数        System.out.println(a);        DoublePower dp = new DoublePower();// 方法一        double d = dp.power(3, 32);        System.out.println(d);        double d1 = dp.power2(3, 32);// 方法二        System.out.println(d1);    }}
原创粉丝点击