代码是别人的,下面的总结分析是我写的,代码链接在最下面。
class Solution {
public double myPow(double x, int n) {
double ans = 1.0;
for(int i = n; i != 0; i /= 2){
System.out.println(i);
if(i % 2 != 0){
ans *= x;
System.out.println("JJJJJ"+ans);
}
x *= x;
System.out.println("OOOOO"+x);
}
return n < 0 ? 1 / ans : ans;
}
}
通过上面的代码,我得到了下面的数据。i,ans,x这三个数据。
(1)当i=6,x=2时,数据的变化
i | 6 | 3 | 1 |
ans | 1 | 4 | 64 |
x | 4 | 16 | 256 |
(2)当i=5,x=2时,
i | 5 | 2 | 1 |
ans | 2 | 2 | 32 |
x | 4 | 16 | 256 |
通过上面的数据表格,可以得到一个规律。
(1)如果i是奇数的话,它下面的ans就等于它前面一格的ans和x相乘。
(2)如果i是偶数的话,它下面的ans就是它前面一格的ans。
最后的i一定是1,大于1的整数除以2,最后得到1.