剑指offer JZ12 数值的整数次方
发布日期:2021-05-07 13:14:26 浏览次数:16 分类:原创文章

本文共 882 字,大约阅读时间需要 2 分钟。

数值的整数次方

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

思路

方法一: 正数直接累乘exp次就好了,负数取倒数累乘-exp次

public double Power(double base, int exp) {    if(exp == 0) return 1.0;    if(exp<0){        base = 1/base;        exp = -exp;    }    double result = 1.0;    for(int i=0;i<exp;i++){        result*=base;    }    return result;}

方法二:快速幂,也就是9的5次幂可分解为 81819,再用递归方式处理

public double Power(double base, int exp) {        if(exp < 0){ //负指数转为正指数            base = 1/base;            exp = -exp;        }        return power(base,exp);    }        public double power(double base, int exp){        if(exp == 0) return 1.0;        double result;        result = Power(base,exp/2); //先求出n/2次幂的结果        if((exp&1) == 1){ //奇数的判别            return result * result * base;        }else return result * result;    }

总结

1、快速幂:8次幂不需要累乘8次, 计算出4次幂的结果,再平方就好了
2、判断一个数是否为奇数,直接&1 就好了

上一篇:剑指offer JZ13 调整数组顺序使奇数位于偶数前
下一篇:剑指offer JZ47 求1+2+3+...+n

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月27日 23时23分19秒