zoukankan      html  css  js  c++  java
  • 12 数值的整数次方

    题目描述

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

    tmp & 1 == 1,只能判断最后一位,0011 & 0010 = 0010 = 2.

    快速幂的原理相当于将指数变为二进制,分别计算每一二进制位的值然后相乘。

    一定记住对于这种有指数的一定要判断是否为负数,将负数转化为整数计算后取反,当然必须判断底数不为0;

    *当n为偶数,a^n =(a^n/2)*(a^n/2
    *当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a
    *时间复杂度O(logn)
    func abs(a int) int {
        if a < 0 {
            return -a
        }
        return a
    }
    
    func Power( base float64 ,  exponent int ) float64 {
        // write code here
        if base < 0.00000001 && base > -0.00000001 {
            return 0.0
        }
        if exponent == 0 {
            return 1.0
        }
        
        res := 1.0
        tmp := abs(exponent)
        for tmp != 0 {
            if 1 & tmp == 1 {
                res = res * base
            }
            base = base * base
            tmp = tmp >> 1
        }
        
        if exponent < 0 {
            res = 1.0 / res
        }
        
        return res
        
    }
  • 相关阅读:
    jxl导出Excel文件
    IOC容器中bean的生命周期
    Hibernate缓存
    Hibernate关联映射及高级查询
    Hibernate简介
    jsp中自定义Taglib案例
    面向对象设计原则
    struts2进阶篇(5)
    Spring核心概念之AOP
    struts2进阶篇(4)
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14630206.html
Copyright © 2011-2022 走看看