问题描述:不用递归,写出快速求幂的程序
分析:快速求幂,首先构造出一个base数组,其实base[i+1] = base[i]*base[i]。然后遍历指数中的二进制数,当前位(0或者1)与对应的base数组相乘。
代码如下:
int getSize(int y) {
int size = 0;
while (y) {
y = y >> 1;
size++;
}
return size;
}
int calculateMi(int x, int y) {
int size = getSize(y);//求y的位数
int *nums = new int[size];
nums[0] = x;
for (int i = 1; i < size; i++) {
nums[i] = nums[i - 1] * nums[i - 1];
}
int res = 1;
int index = 0;
while (y) {
int tail = y % 2;
y = y / 2;
if (tail)
res = res*nums[index];
index++;
}
return res;
}