求乘方的另一种思路

算法导论中提到,在求某个数乘方的时候,遵循的是减治法的思想。

这里是另外一种做法,通过对指数y进行二进制分解求乘方,比如x^y,当y=5时,求x^5=x^101,x*=x相当于求解x^10...0....0..,此算法时间复杂度是O(log(y)),代码如下:

#include <iostream>
int len(char *arr){
	int count=0;
	for (int i=0;arr[i]!='\0';i++)
	{
		count++;
	}
	return count;
}
void main(int argc,char* argv[]){
	int x=0,y=0;
	int result=1;
	printf("pls input two numbers:\n");
	scanf("%d",&x);
	scanf("%d",&y);
	char ch[256];
	itoa(y,ch,2);
	for(int i=len(ch)-1;i>=0;i--){
		if(ch[i]=='1')
		{
			printf("%d\n",x);
			result*=x;
		}
		x*=x;
	}
      print("result:%d",result);
	system("pause");
}

  

你可能感兴趣的:(求乘方的另一种思路)