zoukankan      html  css  js  c++  java
  • 数值的整数次方

    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方

    算法注意事项:

    算法并不是很难,但这里要注意对输入的要求进行检查,例如指数是0的情况,底数是0的情况,底数是-1的情况等。所以这里还是要注意很多问题的。下面是代码,从代码中来学习

     1 #include<iostream>
     2 using namespace std;
     3 
     4 bool InvalidInput = false;
     5 /*
     6     这个equal函数需要注意的地方是比较两个double或者float的数时用哪种方法,这里给出了
     7     一种经典的方法, 
     8 */
     9 bool equal(double num1, double num2){
    10     
    11     if((num1 - num2) < 0.0000001 && (num1 - num2) > -0.0000001){
    12         return true;
    13     }
    14     else{
    15         return false;
    16     }
    17 }
    18 
    19 /*
    20     计算指数值的核心算法 
    21 */ 
    22 double powerCore(double base, unsigned int exponent){
    23     if(exponent == 0){      //如果指数是0,那么无论底数是什么,结果都为1,返回即可 
    24         return 1;
    25     }
    26     if(exponent == 1){      //如果指数是1,那么就返回底数本身,因为任何数的1次方还是本身 
    27         return base;
    28     }
    29 /*
    30     递归算法求出结果,这里用到了优化的算法,对指数分奇数和偶数 
    31 */ 
    32     double result = powerCore(base, exponent >> 1);
    33     result *= result;
    34     
    35     if( (exponent & 0x1) == 1){                 //奇数的情况下,需要再乘以底数 
    36         result = result * base;
    37     }
    38     
    39     return result;
    40 }
    41 
    42 double Power(double base, double exponent){
    43     InvalidInput = false;
    44     
    45     if(equal(base, 0.0) && exponent < 0){            //如果底数是0,指数是负数,那么返回标志0.0 
    46         InvalidInput = true;
    47         return 0.0;
    48     }
    49     
    50     unsigned int absExponent = (unsigned int)(exponent);
    51     if(exponent < 0){
    52         absExponent = (unsigned int )(-exponent);           //如果指数是负数,需要先将指数转化为正数 
    53     }
    54     
    55     double result = powerCore(base, absExponent);
    56     
    57     if(exponent < 0){                                       //如果指数是负数,将结果取倒数即可 
    58         result = 1.0 / result;
    59     }
    60     
    61     return result;
    62 } 
    63 
    64 int main(){
    65     /*
    66     写了5组测试的数据 
    67     */
    68 //    double tags = Power(0, -1);
    69 //    double tags = Power(2, -1);
    70 //    double tags = Power(-1, 3);
    71 //    double tags = Power(2, 3);
    72     double tags = Power(9, 0);
    73     if(equal(tags, 0.0)){
    74         cout<<"The invalid input"<<endl;
    75     }
    76     else{
    77         cout<<"the result is "<<tags<<endl;
    78     }
    79     
    80     return 0;
    81 }
  • 相关阅读:
    ESRI Shapefiles (SHP)
    Python与开源GIS:在OGR中使用SQL语句进行查询
    [推荐]网店代销的卖家,你的宝贝名称修改了吗?
    怎么把经纬度转换成标准的度分秒单位
    如何提高淘宝流量
    十八种方法提升淘宝店流量
    mysql备份数据库几种方法
    Linux查看文件编码格式及文件编码转换
    MySQL 修改字段类型或长度
    mysql外键使用和级联
  • 原文地址:https://www.cnblogs.com/dormant/p/5326477.html
Copyright © 2011-2022 走看看