zoukankan      html  css  js  c++  java
  • 【剑指offer】数值的整数次方

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

    分析:采用快速幂

    以求2的5次方为例,5的2进制为101,第一个1的权值是4,第二个1的权值是1,所以2的5次方可以表示为2^4*2^1,这样以来本来时间复杂度是O(N),现在时间复杂度变成了O(log N)

    以3的13次方为例,13的二进制为1101,第一个1权值是8,第二个1权值是4,第三个1权值是1,所以3的13次方可以表示为

    3^8*3^4*3^1

    #include <iostream>
    #include <stdio.h>
    #include <memory>
    using namespace std;
    
    class Solution
    {
    public:
        double Power(double n,int m)//快速幂
        {
            if(n==0)
                return 0.0;
            if(m==0)
                return 1.0;
            int flag=0;
            if(m<0)
            {
                m=abs(m);
                flag=1;
            }
            double s=1.0,x=n;
            while(m)
            {
                if(m&1)//判断m的最后一位是否为1
                {
                    s*=x;
                }
                x*=x;
                m>>=1;//舍去m的最后一位
            }
            if(flag==1)
                return 1.0/s;
            return s;
        }
    };



  • 相关阅读:
    mysql逻辑架构
    delete与truncate的区别
    mycat
    mycat
    MyCat数据库中间件
    mysql主从复制
    docker学习笔记之快速安装
    linux学习笔记之CentOS7系统快速安装
    Redis学习笔记
    双绞线的种类与型号
  • 原文地址:https://www.cnblogs.com/yinbiao/p/11570652.html
Copyright © 2011-2022 走看看