题解 | #数值的整数次方#
数值的整数次方
https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00
//两种方法,第一种常规for循环计算;第二种对幂计算进行优化,如果是计算偶次幂,可以底数平方,幂除以二加快运算;如果奇次则可以底数平方,幂除以二,再多乘一个乘数即可。 // class Solution { // public: // double Power(double base, int exponent) { // double re = 1; // if (exponent == 0) { // return 1; // } // if (exponent < 0) { // exponent = -exponent; // for (int i = 0; i < exponent; i++) { // re = re * base; // } // return 1 / re; // } else { // for (int i = 0; i < exponent; i++) { // re = re * base; // } // } // return re; // } // }; class Solution { public: double Power(double x, int n) { if ( n == 0) return 1; if ( x == 0.0) return 0; long exp = n; if (n < 0) { exp = n * (-1.0); } double res = 1.0; while (exp != 0) { if ( (exp & 1) == 1 ) { //等同于奇数判断 res *= x; } x *= x; exp >>= 1; //移位代替除法 } return n < 0 ? 1 / res : res; } };