标签:return exponent 17 int double 笔试 offer13 base result
13.数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
完善的思路1:
(1) 判断非法输入:底数为0,指数为负数
(2) 指数为正,直接循环计算
(3) 指数为负,先按照其绝对值计算结果,再取反
(4) 判断一个 浮点数等于零 由于计算机精度问题不能直接用 double = = 0 ,
可通过一个 极小的范围 来判断是否为零.
class Solution {
public:
bool g_InvalidInput = false;
double Power(double base, int exponent)
{
if(euqalToZero(base) && exponent<0)
{
g_InvalidInput = true;
return 0.0;
}
unsigned int absExponent = (exponent < 0)?
(unsigned int)(-exponent):
(unsigned int)(exponent);
double result = PowerWithUnignedExponent(base,absExponent);
if(exponent < 0)
return 1.0/result;
else
return result;
}
bool euqalToZero(double base)
{
if((base - 0.0 > -0.000001) && (base - 0.0 < 0.000001))
return true;
else
return false;
}
double PowerWithUnignedExponent(double base,int exponent)
{
double result = 1.0;
for(int i=0; i<exponent; ++i)
result *= base;
return result;
}
};
** 惊艳的思路2:**
(1) 指数为偶:
a^8 = a^4 * a^4
a^4 = a^2 * a^2
a^2 = a^1 * a^1
(2) 指数为奇:
a^9 = a^4 * a^4 *a
a^4 = a^2 * a^2
a^2 = a^1 * a^1
使用位移运算代替除法,用为与运算判断是否为奇
class Solution {
public:
bool g_InvalidInput = false;
double Power(double base, int exponent)
{
if(euqalToZero(base) && exponent<0)
{
g_InvalidInput = true;
return 0.0;
}
unsigned int absExponent = (exponent < 0)?
(unsigned int)(-exponent):
(unsigned int)(exponent);
double result = PowerWithUnignedExponent(base,absExponent);
if(exponent < 0)
return 1.0/result;
else
return result;
}
bool euqalToZero(double base)
{
if((base - 0.0 > -0.000001) && (base - 0.0 < 0.000001))
return true;
else
return false;
}
double PowerWithUnignedExponent(double base,int exponent)
{
if(exponent == 0)
return 1.0;
if(exponent == 1)
return base;
double result = PowerWithUnignedExponent(base,exponent>>1);
result *= result;
if(exponent & 0x1)
result *= base;
return result;
}
};
标签:return,exponent,17,int,double,笔试,offer13,base,result 来源: https://blog.csdn.net/weixin_42405632/article/details/88310734
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。