剑指offer第十二题。

题目描述

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

解题思路

把两个问题考虑清楚就可以了。第一个问题是判断指数是不是小于0,这关系到要不要取倒数;第二个问题是判断底数是不是负数,这个时候,如果指数是偶数,则为正数,如果指数为奇数则为负数。

我们将问题简化,将底数设置为正数,设好标识符最后统一处理,我们的首要目标是计算出次方数,最后再判断上面的两种情况,对结果进行调整。

我的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0){
return 1;
}

//先把指数全部搞成正数,后面再处理
int e = exponent;
if(exponent < 0){
e = -exponent;
}

//看看是不是奇数,如果是奇数并且base为负数,那么最终还是负数,其余情况都是正数
boolean flag = true;
if(base % 2 == 0){
flag = false;
}

//计算次方的结果
double res = 1.0;
while(e > 0){
res *= base;
e--;
}

//如果指数小于0,则要取倒数
if(exponent < 0){
res = 1/res;
//base为负数并且指数为基数的时候,要取反
if(flag){
res = 0-res;
}
}

return res;
}
}

注:貌似有更快的方法,暂时先不考虑了。