a n为整数
第一坑,a、n不一定为正数,也不一定是整数 0的0次方,没有意义
先要提要求,让对方必须给出a和n的数值类型,用java基本类型表示
n必须是整数,不然出现6的3.1415次方,根本就不用算了
再分9种情况,a的正、0、负与b的正零负的3*3棋盘格
第三坑,结果可能超过 int 或long或 double上限
第二坑,性能 只说n是正整数的情况 n只有两种可能 n = 2k 或 n = 2k+1 所以, a^n = a^2k或 a^(2k+1) = (a2)n 或 a2n * a
令b=a^2 即a^n 转换成了b^k。这种方法可以一直套下去。
====================== 代码
二进制 double Pow(double b, int l){ if (l == 0)return 1; double sum = 1; while (l){ if (l & 1) sum = b; l >>= 1; b = b; } return sum; }
或老老实实除2
double Pow(double b, int l){ if (l == 0)return 1; double sum = 1; while (l){ if (l % 2 ==1) sum = b; l =l/2; b = b; } return sum; }