您的位置:首页 > 职场人生

【面试题】剑指offer11--求一个数的指数次方,模拟实现一个pow函数

2017-06-14 23:14 387 查看
求一个数的指数次方,就是我们数学中的次方问题。

但是在代码的实现的时候,要考虑的东西很多

指数的范围,基数的范围,还有特殊的情况

代码实现如下:

#include<iostream>
using namespace std;
#include<assert.h>
double PowerWithUnsignedExpond(double base, size_t exponent)
{
if (exponent == 0)//指数为0的时候,直接返回1
{
return 1;
}
if (exponent == 0)//指数为0的时候,直接返回基数
{
return base;
}
//递归求解指数的一半,得到的数的平方就是当前的解
double ret = PowerWithUnsignedExpond(base, exponent >> 1);
ret = ret*ret;

if ((exponent & 0x1) == 1)
{
ret = ret*base;
}
return ret;
}

double Power(double base, int exponent)
{
assert(base != 0.0 || exponent >= 0);
//求出指数的绝对值
size_t absExponent = (size_t)(exponent);
//如果指数小于0,则将指数变成正值
if (exponent < 0)
{
absExponent = (size_t)(-exponent);
}
//递归求解
double ret = PowerWithUnsignedExpond(base, absExponent);

//如果指数小于0,求倒数
if (exponent < 0)
{
ret = 1.0 / ret;
}
return ret;
}
int main()
{
int m = 0;
int n = 0;
cout << " 请输入基数m和次数n:";
cin >> m >> n;
cout << "m的n次方为:" << Power(m, n) << endl;
system("pause");
return 0;
}运行的结果如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐