[剑指offer]数值的整数次方

简介: [剑指offer]数值的整数次方题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

[剑指offer]数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

解题思路
  1. 指数为负时,可以先对指数求绝对值,算出次方的结果后再取倒数
  2. 当底数为0,指数为负时,会出现对0求倒数情况,要特殊处理
  3. 0的0次方在数学上没有意义,因此无论输出0还是1都是可以接受的
  4. 在计算次方的时候,除了简单的遍历,我们可以使用递归的思想,如下公式,来减少计算量:
    img_c627504f0800862bbb4d3a71adf16c32.jpe
    image
参考代码
public class Solution {
    public double Power(double base, int exponent) {
        int n = exponent;
        if(exponent==0){
            // 当指数为0底数为0时,没有意义,返回0或者返回1都可以
            return 1;
        }else if(exponent < 0){
            if(base == 0){
                throw new RuntimeException("分母不能为0"); 
            }
            n = -exponent;
        }
        double res = PowerUnsignedExponent(base, n);
        return exponent<0? 1/res: res;
  }
    public double PowerUnsignedExponent(double base, int n){
        if(n == 0)
            return 1;
        if(n == 1)
            return base;
        //递归
        double res = PowerUnsignedExponent(base, n/2);
        res *= res;
        if(n%2 == 1)
            res *= base;
        return res;
    }
}
代码优化

可以使用右移运算符代替除以2,用位与运算符代替求余运算符(%)来判断一个数是奇数还是偶数。

public double PowerUnsignedExponent(double base, int n){
        if(n == 0)
            return 1;
        if(n == 1)
            return base;
        //递归
        double res = PowerUnsignedExponent(base, n>>1);
        res *= res;
        if((n & 0x1) == 1)
            res *= base;
        return res;
}
目录
相关文章
|
2月前
求一个整数的所有因数
【10月更文挑战第25天】求一个整数的所有因数。
22 5
【剑指offer】-数值的整数次方-12/67
【剑指offer】-数值的整数次方-12/67
|
算法 C++
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
|
算法
剑指Offer - 面试题16:数值的整数次方
剑指Offer - 面试题16:数值的整数次方
64 0
剑指offer 15. 数值的整数次方
剑指offer 15. 数值的整数次方
60 0
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
59 0
35.数值的整数次方
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
AcWing 720. 连续整数相加
AcWing 720. 连续整数相加
91 0
AcWing 720. 连续整数相加
【3.整数与浮点数二分】
1.整数二分 >### 二分本质 >- 有单调性,一定可以二分 >- 二分的题目,不一定非要有单调性 >### 思路:分俩种情况,有俩种模板
119 0
【3.整数与浮点数二分】