若是让你求解 m 的 n 次方,而且不能使用系统自带的 pow 函数,你会怎么作呢?这还不简单,连续让 n 个 m 相乘就好了,代码以下:函数
int pow(int n){ int tmp = 1; for(int i = 1; i <= n; i++) { tmp = tmp * m; } return tmp; }
若是让你用位运算来作,你会怎么作呢?spa
我举个例子吧,例如 n = 13,则 n 的二进制表示为 1101, 那么 m 的 13 次方能够拆解为:code
m^1101 = m^0001 * m^0100 * m^1000。blog
咱们能够经过 & 1和 >>1 来逐位读取 1101,为1时将该位表明的乘数累乘到最终结果。直接看代码吧,反而容易理解:class
int pow(int n){ int sum = 1; int tmp = m; while(n != 0){ if((n & 1) == 1){ sum *= tmp; } tmp *= tmp; n = n >> 1; } return sum; }