• 数值的整数次方


    数值的整数次方
    • 参与人数: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 };
  • 相关阅读:
    Codeforces Round #513解题报告(A~E)By cellur925
    Luogu P1463 [POI2002][HAOI2007]反素数【数论/dfs】By cellur925
    NOIp2016 蚯蚓 【二叉堆/答案单调性】By cellur925
    Luogu P4139 上帝与集合的正确用法【扩展欧拉定理】By cellur925
    hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925
    poj 1723 Soldiers【中位数】By cellur925
    MyBatis 简介
    对象导航查询和OID查询(补)
    Hibernate查询方式(补)
    Hibernate一级缓存(补)
  • 原文地址:https://www.cnblogs.com/qianmacao/p/4864667.html
Copyright © 2020-2023  润新知