算法:数值的整数次方(Java)

题目

题号:12
题目名:数值的整数次方

编程语言

Java

题目描述

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

保证base和exponent不同时为0

初次思路

快速幂(二分):

xn = xn/2 *xn/2 = ((x2))n/2

n/2的值是n/2向下取整,如果n是奇数,那么n/2=[n/2]+1;如果n是偶数,那么n/2=[n/2]

也是就说当x是偶数时:xn = = ((x2))[n/2]

x是奇数时,xn = = x*((x2))[n/2] 因为奇数要剩下一项x

那么最后求xn的时候,直接每次n/2,就将x*x,最后n变成0,x就乘完了

举例:x10=x2*5 =x2*2 * x2*2 * x2

解题代码

public class Solution {
    public double Power(double base, int exponent) {
        //使用二分快速幂
        if(base==0) return 0;
        //考虑到指数大小,用Long替换int
        long e = exponent;
        //如果指数是负数,那要先变成整数
        if(e<0) {
            base = 1/base;
            e = -e;
        }
        //开始运算x^n = x^n/2 *x^n/2 = ((x^2^))^n/2
        //要把指数降成0,由于有可能是奇数,奇数时会多出一项x,直接乘进结果就行
        double res =1.0;//用于和x相乘获取最终值
        while(e>0) {
            //如果是奇数
            if(e%2==1) {
                res*=base;//将多出的x直接乘入res,最后一次肯定是1,直接将所有base底数乘进去
            }
            e/=2;
            base*=base;//每次二分都会将新的base^2作为底数
        }
        return res;
    }
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
                                </div><div><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值