/
pow.cpp
52 lines (44 loc) · 1 KB
/
pow.cpp
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
*Implement pow(x, n)
**/
class pow {
public:
bool is_even(int x) {
if ( 0 == x%2 ) return true;
return false;
}
bool is_even1(int x) {
if((x & 1) == 0) return true;
return false;
}
//RunTime : O(log n)
double pow(double x, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
double t = 1;
//To Handle -ve power cases
if (n < 0 ) { n = -n ; x = 1/x;}
//Base case
if (n == 0) { return t ;}
//store output
if ( true == is_even (n) ) {
t = pow(x,n/2);
t = t*t;
}else {
t = x * pow(x,n-1);
}
return t;
}
//optimized version with same complexity as pow();
double pow1(const double base,int n) {
if(n == 0) return 1;
double ret;
else if(n%2 == 0) {
ret = pow1(base,n/2);
return ret * ret;
}else {
ret = pow1(base,(n-1)/2);
return base * ret * ret;
}
}
};