Implement pow(x, n).
很有趣的题,第一次暴力乘了,超时。然后就想到多项式分解了,想到二进制,想到了取次数相当于二进制遇“0”不管,遇“1”乘x,移位取平方。
代码测试后出现负次数没有过,加了这部分代码就过了。
代码不难,优化只需要小动脑,还是挺好玩的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
class
Solution { public : double
pow ( double
x, int
n) { double
result =1; int
flag = 0; if (n<0)flag =1; n= abs (n); stack< int > sk; while (n>0) { sk.push(n%2); n = n/2; } while (!sk.empty()) { result *= result; if (sk.top() == 1) result *= x; sk.pop(); } if (flag ==1) result =1/result; return
result; } }; |
原文:http://www.cnblogs.com/pengyu2003/p/3595181.html