求一个数的x次方

来源:互联网 发布:知合控股 封锐 编辑:程序博客网 时间:2024/04/28 21:01

思路:分几种情况
1、不合法的输入,基数等于0并且指数小于0。
2、任何一个数的0次方都等于1。
3、指数是负数,可以先对指数求绝对值,然后计算出次方的结果之后再取倒数。
4、递归求次方效率更高,时间复杂度为O(lgn)。
根据公式:
这里写图片描述

#include<iostream>using namespace std;//判断浮点数是否等于0bool equal(double d1, double d2){    if ((d1 - d2 < 0.000000001) && (d1 - d2 > -0.00000001))        return true;    else        return false;}double Power(double base, int expo){    if (expo == 1)        return base;    double result = Power(base, expo >> 1); //用右移一位来代替除以2    result *= result;    if ((expo & 1) == 1) //用按位与运算判断expo是奇数还是偶数,代替%运算        result *= base;    return result;}double MyPower(double base, int expo){    //非法输入    if (equal(base, 0.0) && expo < 0)        return 0.0;    if (expo == 0) //任何数的0次方都为1        return 1.0;    int absExpo = expo;    if (expo < 0) //指数为负数        absExpo = -expo;    double result = Power(base, absExpo);    if (expo < 0) //2^(-3) = 1/(2^3)        result = 1.0 / result;    return result;}int main(){    double base = -2; //基数    int expo = -3; //指数    double ret = MyPower(base, expo);    cout << base << "^" << expo << " = " << ret << endl;    getchar();    return 0;}
0 0