在线题目链接:数值的整数次方
 
文章目录
- 1 题目描述
 - 2 题目分析
 - 2.1 方法1 循环
 - 2.11 Java代码
 - 2.12 C++代码
 
- 2.2 方法2 递归
 - 2.21 Java代码
 - 2.22 C++代码
 
- 3 总结
 
1 题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
2 题目分析
2.1 方法1 循环
常规做法是直接写一个循环,让exponent个base相乘即可。这里我们主要要注意的是exponent可能小于0。所以要考虑这种情况,代码还是很好写的:
2.11 Java代码
public class Solution {public double Power(double base, int exponent) {//非递归解法if(exponent==0)return 1;if(exponent<0)return 1/Power2(base,-exponent);//exponent小于0时double ret=1;for(int i=1;i<=exponent;i++)ret*=base;return ret;}double Power2(double base, int exponent){double ret=1;for(int i=1;i<=exponent;i++){ret*=base;}return ret;}
}
 
2.12 C++代码
class Solution {
public:double Power(double base, int exponent) {//非递归解法if(exponent==0)return 1;//int absExponent=abs(exponent);if(exponent<0)return 1/Power2(base,-exponent);double ret = 1;for(int i=1;i<=exponent;i++)ret*=base;return ret;}//这个函数的exponent参数时正的double Power2(double base, unsigned int exponent){double ret = 1;for(int i=1;i<=exponent;i++)ret*=base;return ret;}
}; 
2.2 方法2 递归
对于以下公式,我们肯定是非常熟悉的:
这种公式我们已经很常见了,可以利用递归来求解。只需要注意n的奇偶性即可。
2.21 Java代码
public class Solution {public double Power(double base, int exponent) {//递归解法if(exponent==0)return 1;else if(exponent >0){if((exponent&0x1)==1)return base*Power(base,(exponent-1)>>1)*Power(base,(exponent-1)>>1);else return Power(base,exponent>>1)*Power(base,exponent>>1);}else {return (double)1/Power(base,-exponent);}}   
}
 
2.22 C++代码
class Solution {
public:double Power(double base, int exponent) {//递归解法if(exponent==0)return 1;else if(exponent >0){if(exponent & 0x1)return base*Power(base,(exponent-1)>>1)*Power(base,(exponent-1)>>1);else return Power(base,exponent>>1)*Power(base,exponent>>1);}else {return (double)1/Power(base,-exponent);}}
};
 
3 总结
主要是注意输入数据的所有的可能性,比如上面的exponent的值有可能是小于0的数,所以要考虑问题全面、
探讨学习加:
 个人qq:1126137994
 个人微信:liu1126137994
