最简单的pow
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int num=0;
int n=0;
int sum=1;
cin >> num;
cin >> n;
for (int i = 0; i < n; ++i)
{
sum*=num;
/* code */
}
cout<<sum;
return 0;
}
直接使用for循环,此时他的时间复杂度为O(n);
使用分治思想的递归实现pow
#include <iostream>
using namespace std;
int pow(int num,int n)
{
if ( n == 0 )
return 1;
if(n%2==0)
return pow(num,n/2)*pow(num,n/2);
else
return pow(num,n/2)*pow(num,n/2)*num;
}
int main(int argc, char const *argv[])
{
int num=0;
int n=0;
int sum=1;
cin >> num;
cin >> n;
sum=pow(num,n);
cout<<sum;
return 0;
}
此时算法的时间复杂度为log(n) //这里的log底数为2
不使用递归的pow算法
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int num=0;
int n=0;
int sum=1;
cin >> num;
cin >> n;
while(n)
{
if( n & 1 )
sum = sum *num;
n>>=1;
num*=num;
}
cout<<sum;
return 0;
}