• 数值的整数次方


    数值的整数次方
    • 参与人数: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 };
  • 相关阅读:
    WPF 文本动画 文字BaseLine 字体 行高计算说明
    C#查找窗口,并控制窗口显示隐藏,通过改变窗口样式方式
    c#获取状态栏图标并-模拟鼠标点击-模拟鼠标点击窗体的某些按钮
    IEC 104公约 解析 c#使用通过104公约同步时间
    hprose数据可视化显示,通过c#序列化,列表形式展示,导出excel、csv
    微服务优秀博文资料
    IT 常用单词表
    java 优秀开源项目
    java并发编程学习博客
    LDAP服务端
  • 原文地址:https://www.cnblogs.com/qianmacao/p/4864667.html
Copyright © 2020-2023  润新知