题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
实现
1)递归实现:会栈溢出
class Solution {
boolean flag = false;
public double myPow(double x, int n) {
flag = false;
if (x == 0 && n < 0) {
flag = true;
return 0;
}
int tmp = n;
if (n < 0) {
tmp = -n;
}
double res = Pow(x, tmp);
if (n < 0) {
res = 1.0 / res;
}
return res;
}
public double Pow(double x, int n) {
if (n == 0) return 1;
if (n == 1) return x;
double res = Pow(x, n >> 1);
res *= res;
if ((n & 1) == 1) {
res *= x;
}
return res;
}
}
/** 16 整值的整数次方**
* 给定一个double类型的浮点数base和int类型的整数exponent。
* 求base的exponent次方。如,2的n次方
*/
public class C16_num_Power {
public static double power(double base, int exponent) {
if (exponent == 0) {
return 1;
}
if (exponent == 1) {
return base;
}
double res = power(base, exponent >> 1); //除2
res *= res; //对半求,如6次幂=3次幂*3次幂res
if ((exponent & 1) == 1) { //为奇数,结果多×一次base
res *= base;
}
return res;
}
}
2)非递归:while循环 与上述思路一致
class Solution {
public double myPow(double x, int n) {
if(x == 0) return 0;
long b = n;
double res = 1.0;
if(b < 0) {
x = 1 / x;
b = -b;
}
while(b > 0) {
if((b & 1) == 1) res *= x; //b是奇数
x *= x;
b >>= 1;
}
return res;
}
}
// https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/solution/mian-shi-ti-16-shu-zhi-de-zheng-shu-ci-fang-kuai-s/
Test
public static void main(String[] args) {
double num1 = 2;
int num2 = 7;
double res = power(num1, num2);
}