• 数值的整数次方



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


    本题需要考虑三种情况:

    • exponent == 0
    • exponent > 0
    • exponent < 0

    解法一

    暴力解法,分三种情况考虑

    public class Solution {
        public double Power(double base, int exponent) {
            if(exponent < 0) {
                base = 1 / base;
                exponent = -exponent;
            }
            if(exponent == 0) {
                return 1.0;
            }
            double result = 1.0;
            for(int i = 1; i <= exponent; i++) {
                result *= base;
            }
            return result;
        }
    }
    

    解法二

    使用快速幂可以解决该问题,假设我们求 x8,如果我们知道 x4,那么 x8 = (x4)2,所以 xn = (xn/2)2

    但是还有个小问题,如果 n 是偶数,那么上述没问题。如果 n 是奇数,则 xn = (xn/2)2 * x

    public class Solution {
        
        public double Power(double base, int exponent) {
            if(exponent < 0) {
                base = 1 / base;
                exponent = -exponent;
            }
            return q_Power(base, exponent);
        }
        
        private double q_Power(double base, int exponet) {
            if(exponet == 0) {
                return 1.0;
            }
            double result = q_Power(base, exponet / 2);
            if((exponet & 1) != 0) {
                return result * result * base;
            } else {
                return result * result;
            }
        }
    }
    

  • 相关阅读:
    【今日CS 视觉论文速览】Mon, 7 Jan 2019
    文章汇总页面
    【MarkDown】转义字符
    hdu 4678 Mine 博弈论
    hdu 4294 Multiple
    hdu 4291 A Short problem
    hdu 4672 Present Day, Present Time 博弈论
    hdu 3544 Alice's Game 博弈论
    hdu 3389 Game 博弈论
    hdu 2147 kiki's game 博弈论
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/13734231.html
Copyright © 2020-2023  润新知