实数的整数次幂( java实现)

该博客介绍了如何在Java中高效计算一个double类型浮点数的整数次幂。讨论了两种优化算法:递归解法(时间复杂度O(NlogN))和快速幂算法(时间复杂度O(logN)),并提供了相应的代码实现。
摘要由CSDN通过智能技术生成

例题:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。
幂就是底数的乘积,如果直接暴力破解时间复杂度为O(N)
下面是两种优化算法
解法一:递归(时间复杂度O(NlogN))

  • 原理:
    求x^n:
    如果n是偶数,则计算x^(n/2) * x^(n/2);
    如果n是奇数,则计算x^(n/2) * x^(n/2) * x;
    PS:如果幂为负数,则先将幂取绝对值,最后结果取其分数
    例如:
    x ^ 11 = x ^5 * x^5 * x
    x ^5 = x^2 * x^2 * x
    x^2 = x * x
  • 代码实现
public double Power(double base, int exponent) {
       double ans = 0.0;
       int e = exponent > 0 ? exponent:-exponent;
       // >> 左移运算符,相当于除2
       ans = Power(base, e >> 1);
       //n无论奇偶都有这一步
       ans *= ans;
       //如果n为奇数,再乘以base
       if((e & 1 )== 1){
           ans *= base;
       }
       return exponent>0 ?ans:1/ans;
 }

解法二:快速幂(时间复杂的O(logN)ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值