在线题目链接:数值的整数次方
文章目录
- 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