比如计算a的13次方,先把13表示成( 1101 )
也就是说,3步可以计算出结果,计算次数为(3+2)
a^2*a
(a^2*a)^2
((a^2*a)^2)^2*a
记算a的n次方,先求出比a小,且是2的幂次的一个数A
#include<iostream>
using namespace std;
int power(int a, int n)
{
int N = 1;
int result = a;
while (N < n)
N <<= 1;
N >>= 2;
while (N > 0) {
if ((N & n) == 1)
result = result * result * a;
else
result = result * result;
N >>= 1;
}
return result;
}
int main(int argc, char *argv[])
{
int a = 3;
int n = 5;
cout << power(a, n) << endl;
}
也就是说,3步可以计算出结果,计算次数为(3+2)
a^2*a
(a^2*a)^2
((a^2*a)^2)^2*a
记算a的n次方,先求出比a小,且是2的幂次的一个数A
#include<iostream>
using namespace std;
int power(int a, int n)
{
int N = 1;
int result = a;
while (N < n)
N <<= 1;
N >>= 2;
while (N > 0) {
if ((N & n) == 1)
result = result * result * a;
else
result = result * result;
N >>= 1;
}
return result;
}
int main(int argc, char *argv[])
{
int a = 3;
int n = 5;
cout << power(a, n) << endl;
}