数值的整数次方

数值的整数次方
  • 参与人数:2805时间限制:1秒空间限制:32768K
  • 通过比例:25.32%
  • 最佳记录:0 ms|0K(来自  我是小码农

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
 1 /* 解法1:
 2     注意考虑指数exponent为负数的情况!
 3     此方法的时间复杂度为O(n),循环次数为abs(exponent)次。
 4 */
 5 class Solution {
 6 public:
 7     double PowerWithAbsExponent(double base, int exponent){
 8         double result = 1.0;
 9         for (int i = 0; i < abs(exponent); i++)
10             result *= base;
11         return result;
12     }
13     double Power(double base, int exponent) {
14         // base^0 = 1.0
15         if (exponent == 0)
16             return 1.0;
17         // 0.0^exponent = 0.0
18         if ( (base - 0.0 > -0.0000001) && (base - 0.0 < 0.0000001) )
19             return 0.0;
20         double result = PowerWithAbsExponent(base, abs(exponent));
21         if (exponent < 0){    // 若exponent为负数,则结果取倒数
22             result = 1.0/result;
23         }
24         return result;
25     }
26 };
 1 /* 解法2:
 2     由于:
 3     若n为偶数,则 a^n = a^(2/n) * a^(2/n);
 4     若n为奇数,则 a^n = a^(2/n) * a^(2/n) * a.
 5     因此,可以由此优化解法1.
 6     该解法的时间复杂度为 O(logn)。
 7 */
 8 class Solution {
 9 public:
10     double PowerWithAbsExponent(double base, int exponent){
11         if (exponent == 0)
12             return 1.0;
13         double result = PowerWithAbsExponent(base, exponent >> 1);    // 使用右移>>操作除2的效率更高!
14         result *= result;
15         if (exponent & 1 == 1)    // 判断exponent是否为奇数:用位与运算符代替求余运算符(%)
16             result *= base;
17         return result;
18     }
19     double Power(double base, int exponent) {
20         // base^0 = 1.0
21         if (exponent == 0)
22             return 1.0;
23         // 0.0^exponent = 0.0
24         if ( (base - 0.0 > -0.0000001) && (base - 0.0 < 0.0000001) )
25             return 0.0;
26         double result = PowerWithAbsExponent(base, abs(exponent));
27         if (exponent < 0){    // 若exponent为负数,则结果取倒数
28             result = 1.0/result;
29         }
30         return result;
31     }
32 };
原文地址:https://www.cnblogs.com/qianmacao/p/4864667.html