缘由
今天打google在codejam上办的apactest,成绩还行吧(最后排名540),第二题逗比了,自己逻辑后来理清楚,但是代码还是原来的想法,wa了两次才找到了bug。
第二题需要实现一个整数的pow函数,之前只会递归的写法,今天学会了迭代的写法,回想《剑指offer》里也有类似的东西,所以整理成这篇博客。
整数的非负整数次幂(不考虑大数)
线性求幂
比如求2的10次幂,可能有人随手十几秒就写完了:
typedef long long LL;
LL pow(int base, int exponent) {
LL ans = 1;
for (int i = 0; i < exponent; ++i) {
ans *= base;
}
return ans;
}
如果exponent是比较大的呢?有没有更快的?
快速幂算法登场
我们把exponent表示成二进制的形式,比如15=1111,那么其实有:
a11=a10112=a10002+102+12=a10002∗a