标签:
思路一:
x,1 x,2 x,4 x,8 x,16依次往上加,再往下减 5=1+2+2,这种方法不好
思路二:利用5=101=4+1=(2,2)+(2,0),很巧妙
double res = 1.0; bool flag = false; unsigned int newn =n; //这一步比较神奇,为了照顾最小的负数 if(n<0) {newn=-n;flag=true;} while(newn){ if(newn & 0x01){ res*=x; } newn>>=1; x*=x; } if(flag) return 1/res; return res;
思路三:一半一半,递归的思路,我何时能有递归的思路呀。。。
double myPow(double x, int n) { if (n == 0) return 1.0; double half = pow(x, n/2); if (n%2 == 0) { return half*half; } else if (n>0) { return half*half*x; } else { return half/x*half; }
标签:
原文地址:http://www.cnblogs.com/julie-yang/p/4701136.html