#include "stdafx.h"
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
int power(int x, int n) //注意数值不要大 整数表示范围有限
{
int y=x;
while(n>1)
{
y *= x;
n--;
}
return y;
}
{
int y=x;
while(n>1)
{
y *= x;
n--;
}
return y;
}
int fastPower(int x, int n)
{
int m = n;
int t = 1;
int y = 1;
while(m>0)
{
m /= 2;
t *= 2;
}
m = n;
while(t> 1)
{
t /= 2;
y *= y;
if(m >= t)
{
y *= x;
m -= t;
}
}
return y;
}
{
int m = n;
int t = 1;
int y = 1;
while(m>0)
{
m /= 2;
t *= 2;
}
m = n;
while(t> 1)
{
t /= 2;
y *= y;
if(m >= t)
{
y *= x;
m -= t;
}
}
return y;
}
int _tmain(int argc, _TCHAR* argv[])
{
int val = power(2,6);
cout<<val<<endl;
int val1 = fastPower(2,6);
cout<<val1<<endl;
getchar();
{
int val = power(2,6);
cout<<val<<endl;
int val1 = fastPower(2,6);
cout<<val1<<endl;
getchar();
return 0;
}
进行快速求解x的n次方
( 假如 n = 5(101) 当n的二进制分解为1时:y=y*y*x 当n分解为0时: y=y*y)
y= 1;
index = 1: y = y*y*x = x;
index = 0: y = y*y = x的平方
index = 1: y = y * y *x = x的5次方
(index从前往后读)
以空间换时间(提高效率)
时间复杂度的变化 O(n)---->O(logN)
}
进行快速求解x的n次方
( 假如 n = 5(101) 当n的二进制分解为1时:y=y*y*x 当n分解为0时: y=y*y)
y= 1;
index = 1: y = y*y*x = x;
index = 0: y = y*y = x的平方
index = 1: y = y * y *x = x的5次方
(index从前往后读)
以空间换时间(提高效率)
时间复杂度的变化 O(n)---->O(logN)