快速幂
算一个数的n次方怎么乘最省?

- t 乘自己
- n的二进制有多少位,t就跟自己玩多少回
- 上面这种情况是只适用于n是正数的情况,
若n是负数,那么这样可以把n转成正数,最后再用1除以结果
但若n是系统最小转不了,怎么处理系统最小?(X^系统最小) (系统最小转不成正数)
- 先算X ^ (系统最小 + 1), 得到ans
- 最后再把ans * X
- 若X绝对值小于1, 和x绝对值大于1 ,绝对不用想,溢出,直接返回0即可
- 只用判断x绝对值等于1的情况
public double myPow(double x, int n) {if (n == 0) {return 1D;}int pow = Math.abs(n == Integer.MIN_VALUE ? n + 1 : n);double t = x;double ans = 1D;while (pow != 0) {if ((pow & 1) != 0) {ans *= t;}pow >>= 1;t *= t;}if (n == Integer.MIN_VALUE) {ans *= x;}return n < 0 ? (1D / ans) : ans;}
