为了账号安全,请及时绑定邮箱和手机立即绑定

剑指Offer-数值的正数次方

标签:
Java 算法

        最近一直在复习一些算法及数据结构方面的东西,就找了一个适合找工作笔试的题目,在剑指Offer上刷了几道题目,发现对复习知识点还是很有用的,推荐要找工作的伙伴去剑指Offer刷题。


题目描述

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


这是一道整数快速幂的题目,根据二进制的进位来进行乘法运算,大大减少的乘的次数:

例如 (5.08)^7 = (5.08)*(5.08)*(5.08)*(5.08)*(5.08)*(5.08)*(5.08)

假如是常规的乘法得乘七次,而快速幂的话则保留了上一次的乘积 (5.08)^7 = (5.08)^1 * (5.08)^3 * (5.08)^4 减少了很多次数

代码如下:


public class Solution {
    public double Power(double base, int exponent) {
        
        boolean flag = true;
        if(exponent < 0){
            flag = false;
            exponent = -exponent;
        }
        
        double res  = 1.00;
        while(exponent > 0){
            if(exponent % 2 == 1){
                //奇数位的话直接乘上base
                res = res * base;  
            }
            exponent = exponent >> 1;
            //偶数位的话叠加
            base = base * base;
        }   
        
        //如果为负数,结果则为倒数
        if(flag == false){
            return 1.0/res;
        }
        
        return res;
   }
}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
7796
获赞与收藏
665

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消