算法导论中提到,在求某个数乘方的时候,遵循的是减治法的思想。
这里是另外一种做法,通过对指数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]!=' ';i++) { count++; } return count; } void main(int argc,char* argv[]){ int x=0,y=0; int result=1; printf("pls input two numbers: "); 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 ",x); result*=x; } x*=x; } print("result:%d",result); system("pause"); }