• 数值的整数次方


    实现函数:double Power(double base ,int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。

    c语言中有一个pow函数可以求得数的乘方。

    基本实现:

    1 double Power(double base,int exponent)
    2 {
    3     double result=1.0;
    4     for(int i=1;i<=exponent;++i)
    5     {
    6         result*=base;
    7     }
    8     return result;
    9 }

    考虑不全面的地方:1、exponent小于1(0或者负数怎么办?)

             2、0的0次方是几?(数学上未曾明确的定义1 or 0都可以)

             3、效率是否很高?

     1 #include<iostream>
     2 using namespace std;
     3 bool InvalidInput = false;
     4 bool equals(double num1, double num2)
     5 {
     6     if (num1 - num2<0.0000001&&num1 - num2>-0.0000001)
     7         return true;
     8     return false;
     9 }
    10 double PowerNormal(double base, unsigned int exponnent)
    11 {
    12     double result = 1.0;
    13     for (int i = 1; i <= exponnent; ++i)
    14     {
    15         result *= base;
    16     }
    17     return result;
    18 }
    19 double Power(double base, int exponent)
    20 {
    21     InvalidInput = false;
    22     if (equals(base, 0.0) && exponent < 0){
    23         InvalidInput = true;
    24         return 0.0;
    25     }
    26     unsigned int Normalexponent = (unsigned int)(exponent);
    27     if (exponent < 0)
    28     {
    29         Normalexponent = (unsigned int)(-exponent);
    30     }
    31     double result=PowerNormal(base, Normalexponent);
    32     if (exponent < -1){
    33         result = 1.0/ result;
    34     }
    35     return result;
    36 }
    37 int main()
    38 {
    39     cout << Power(2.5, 2) << endl;
    40     cout << Power(9.3, -4) << endl; 
    41     cout<< Power(0, 0) << endl;
    42 
    43     system("pause");
    44     return 0;
    45 }

    更高效的Power函数

     1 double PowerunsignedExponent(double base, unsigned int exponent)
     2 {
     3     if (exponent == 0)
     4         return 1;
     5     if (exponent == 1)
     6         return base;
     7     double result = PowerunsignedExponent(base, exponent >> 1);
     8     result *= result;
     9     if (exponent & 0x1 == 1)
    10         result *= base;
    11     return result;
    12 }
  • 相关阅读:
    微信公众号开发(一)——环境搭建
    Spring中@Async-异步处理
    SSL/TLS安全评估-查看访问的网址支持哪些协议等
    SSL异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    Java代码自动部署
    SQL优化技巧
    idea2019.2 svn 忽略文件问题
    Remote System Explorer Operation在eclipse后台一直跑 解决办法
    JPA project Change Event Handler问题解决
    MySQL按首字母查询
  • 原文地址:https://www.cnblogs.com/General-up/p/5423328.html
Copyright © 2020-2023  润新知