0
点赞
收藏
分享

微信扫一扫

[每日一道小算法(六)] [代码完整性]数值得整数次方


前言:
今天又来更新算法题啦,这道题出自剑指offer中,题挺简单,就看你能不能把答案写正确。

题目描述

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

保证base和exponent不同时为0

题目解析

这到题是来求数值得整数次方,在求数值整数次方时我们要考虑到底数不能为0,这是其中一个限定条件,然后还要考虑得一个问题时知数为正数和负数这两种情况的数值是不一样,所以需要进行数值判断,考虑好了条件,接着就可以考虑接下来得代码该怎么写了。

现在假设指数为32,那么如果我们已经知道了他得16次方,那么只需要在16次方得基础上在平方一次就可以了。而16次方是8次方得平方。这样以此类推,这样求32次方只需要做5次乘法:先求平方,在平方得基础上求4次方,在4次方得基础上求8次方,在8次方得基础上求16次方,最后在16次方得基础上求32次方。

依次我们可以推出公式为;

[每日一道小算法(六)] [代码完整性]数值得整数次方_浮点数

代码样例

public class Soultion{
public double Power(double base,int exponent)
{
if(exponent == 0)
{
return 1.0;
}
if(exponent == 1)
{
return base;
}
double result = Power(base,exponent>>1);
result *=result;
//等于奇数代替%2方法位运算效率比乘除法效率要高
if((exponent&0x01)==1)
{
result *= base;
}
return result;
}
/**
* 方法二
* @param base
* @param exponent
* @return
*/
public double Power(double base,int exponent)
{
if(base == 0.0)
{
return 0.0;
}
double result = 1.0d;
//获取绝对值
int e = exponent > 0 ? exponent:-exponent;
//根据指数大小,循环累积
for(int i =1 ; i<=e;i++)
{
result *= base;
}

return exponent>0?result:1/result;
}
}


举报

相关推荐

0 条评论