zoukankan      html  css  js  c++  java
  • 蓝桥学院2019算法题2.20

    题5:设计一个高效的求a的n次幂的算法

    算法分析:

    1、可以用for循环实现 a*a*a*a*...

    2、可以用递归实现 res*pow1(a,n-ex)

     1 package recursion;
     2 
     3 /**
     4  * @author zsh
     5  * @company wlgzs
     6  * @create 2019-02-18 16:30
     7  * @Describe 设计一个高效的求a的n次幂的算法
     8  */
     9 public class Main8 {
    10 
    11     /**
    12      * 循环法求a的n次幂,复杂度O(n)
    13      * @param a
    14      * @param n
    15      * @return 结果
    16      */
    17     static int pow0(int a,int n){
    18         int res = 1;
    19         for (int i = 0; i < n; i++) {
    20             res = res*a;
    21         }
    22         return res;
    23     }
    24 
    25     /**
    26      * 优化后求a的n次幂
    27      * @param a
    28      * @param n
    29      * @return 结果
    30      */
    31     static int pow1(int a,int n){
    32         if (n == 0){
    33             return 1;
    34         }
    35         int res = a;
    36         //指数
    37         int ex = 1;
    38         while ( 2*ex <= n){
    39             res = res*res;
    40             ex = ex*2;
    41         }
    42         //差n-ex次方没有乘到结果上去
    43         return res*pow1(a,n-ex);
    44     }
    45 
    46     public static void main(String[] args) {
    47         System.out.println(pow0(2,15));
    48         System.out.println(pow1(2,15));
    49     }
    50 }
  • 相关阅读:
    22 块级元素和行内元素
    21 文档流
    20101018T3 付账
    20181018T1 括号
    poj3417暗的连锁
    点的距离(LCA)
    浅谈RMQ实现LCA
    小R的调度
    bzoj1798维护序列
    bzoj3211花神游历各国
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10396467.html
Copyright © 2011-2022 走看看