剑指 Offer 16. 数值的整数次方
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3 输出:9.26100
示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
用了快速幂的思想来做的
double myPow(double x, int n) { if (n < 0) { if(n> - 2147483648) return (double)1 / myPow(x, -n); else return (double)1 / myPow(x, -(n+1))*x; } if (n == 0) return 1; if (n % 2 == 1) return myPow(x, n - 1)*x; double tem = myPow(x, n / 2); return tem * tem; }
}
快速幂的思想:
算法学习笔记(4):快速幂 - 知乎 (zhihu.com)
还有非递归的快速幂
//非递归快速幂 int qpow(int a, int n){ int ans = 1; while(n){ if(n&1) //如果n的当前末位为1 ans *= a; //ans乘上当前的a a *= a; //a自乘 n >>= 1; //n往右移一位 } return ans; }
浙公网安备 33010602011771号