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

剑指Offer--面试题11 数值的整数次方

2016-05-25 21:55 411 查看
剑指Offer--面试题11 数值的整数次方

原书位置:P90;

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

C++实现:

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

#include <iostream>
using namespace std;
bool Equals(double fir, double sec)
{
if ((fir - sec) <= 0.000000001 && (fir - sec) >= -0.000000001)
{
return true;
}
else
{
return false;
}
}

double _GetPower(double base, unsigned int absExponent)
{
if (absExponent == 1) // 递归终止条件
{
return base;
}
else if (absExponent == 0) // 参数非0判断(只第一次调用需要)
{
return 1;
}

double result = _GetPower(base, absExponent >> 1); // 右移1位相当于除以2
result *= result;
if (absExponent & 0x1 == 1) // 按位与 运算判断是否为奇数
{
result *= base;
}
return result;
}

double GetPower(double base, int exponent)
{
if (Equals(base, 0.0) || Equals(base, 1.0)) return base;
unsigned int absExponent = (unsigned int)exponent;
if (exponent < 0)
{
absExponent = (unsigned int)(-exponent);
}
double result = _GetPower(base, absExponent);
if (exponent < 0 && !Equals(result, 0.0))
{
result = 1 / result;
}
return result;
}

int main(int argc, char *argv[])
{
double base = 0.0;
int exponent = 0;
cin >> base >> exponent;
cout << GetPower(base, exponent) << endl;
system("pause");
return 0;
}


思考:

1、输入参数边界+异常考虑;(如:0的0次方无意义,return 0或1均可;指数为负数等)

2、简单题则考虑效率+细节优化;(如:减少循环次数;位运算的使用等)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: