zoukankan      html  css  js  c++  java
  • 快速幂

    什么是快速幂算法

    快速幂是在O(logn)的时间复杂度内计算乘方的算法,采用的是分治法。

    算法实现

    递归实现

    int qpow(int a, int n)
    {
        if (n == 0)
            return 1;
        else if (n % 2 == 1)
            return qpow(a, n - 1) * a;
        else
        {
            int temp = qpow(a, n / 2);
            return temp * temp;
        }
    }
    

    非递归实现

    int qpow(int a, int n){
        int ans = 1;
        while(n){
            if(n&1)        //如果n的当前末位为1
                ans *= a;  //ans乘上当前的a
            a *= a;        //a自乘
            n >>= 1;       //n往右移一位
        }
        return ans;
    }
    

    使用场景

    计算幂为什么不用Math.pow()呢?
    如果结果太大会导致溢出,所以不能直接使用api计算。通常这类题会要求结果取模,既然无法直接使用pow()方法那我们可以自己实现一个pow方法,并且在每一次计算时取模,最后就可以得到实际结果的取模结果了。

  • 相关阅读:
    iOS -一些常用的方法
    handoff了解
    UIlabel
    扩展运行机制
    github -- fork提交项目
    iOS
    AppDelegate解析
    KVC
    KVO
    xcode升级后, 插件失效修复
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/14968869.html
Copyright © 2011-2022 走看看