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

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

    【思路】首先我们来说一个O(n)的方法,这个题目主要考虑到幂指数为负的情况需要对结果求倒数。

    1class Solution {
     2public:
     3    double Power(double base, int exponent) {
     4        double res = 1;
     5        if(exponent == 0)
     6            return 1;
     7        if(base == 0)
     8            return 0;
     9        for(int i = 0;i < abs(exponent); ++i){
    10            res *= base;
    11        }
    12        if(exponent < 0){
    13            res = 1 / res;
    14        }
    15        return res;
    16    }
    17};

    显然,上面的算法一定不会合面试官的胃口的,因此我们可以使用一个快幂算法来进行求解!其实际编程不复杂,但是效率很高的!

    假设3^64需要64个乘法运算,但如果这样计算的话:

    3^1 = 3 (也就是base)
    3^2 = (3^1) * (3^1)
    3^4 = (3^2) * (3^2)

    3^64 = (3^32) * (3*32)

    这个样子的话,就只算6次乘法,效率提升了很多了!因此我们就可以进行如下编程。

     1class Solution {
     2public:
     3    double Power(double base, int exponent) {
     4        if(exponent == 0){
     5            return 1;
     6        }
     7        if(base == 0){
     8            return 0;
     9        }
    10        double tmp = base;
    11        double res = 1;
    12        int e = abs(exponent);
    13        while(e > 0){
    14            if(e & 1){   //e & 1相当于e % 2 
    15                res *= tmp;
    16            }
    17            e >>= 1;   // e >> 1相当于e / 2
    18            tmp *= tmp;
    19        }
    20        return (exponent > 0) ? res : 1 / res;
    21    }
    22};
  • 相关阅读:
    数据库mysql的基本操作
    多进程多线程与进程池线程池及协程
    面对对象的属性和方法
    Python中的编码及操作文件
    通过pymysql操作mysql数据库
    Spring注入
    Mybatis标签及使用1
    全局配置文件说明
    类方法和对象方法的区别
    Mybatis
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11312171.html
Copyright © 2011-2022 走看看