1 /*编写程序计算x^n,要求: 2 1输入整数x和n 3 2输出x^n的值 4 3思考算法是否可以进一步提升效率,如何提升? 5 4改进并实现算法,分析时间复杂度 6 */ 7 8 #include<iostream> 9 using namespace std; 10 /* 11 //原始方法 12 原始方法的时间复杂度为 O(n) 13 double pow(int x,int n) 14 { 15 if(n<0){ 16 return 1/pow(x,-n); 17 } 18 if(n==0){ 19 return 1; 20 } 21 int sum=1; 22 for(int i=1;i<=n;i++) 23 sum*=x; 24 return sum; 25 } 26 */
1 //改进方法 2 /* 3 改进方法的时间复杂度为 O(n) 4 5 double pow(int x,int n) 6 { 7 if(n<0){ 8 return 1/pow(x,-n); 9 } 10 if(n==0){ 11 return 1; 12 } 13 //n>0时 14 int a=n/2; 15 int sum=1; 16 for(int i=1;i<=a;i++){ 17 sum*=x; 18 } 19 if(n%2==1) 20 return sum*sum*x; 21 else 22 return sum*sum; 23 24 }*/
1 //时间复杂度为 O(log2(n)) 2 double pow(int x,int n) 3 { 4 if(n<0){ 5 return 1/pow(x,-n); 6 } 7 if(n==0){ 8 return 1; 9 } 10 //n>0时 11 double sum=1; 12 int d; 13 while(n!=0) 14 { 15 d=n%2; 16 n=n/2; 17 18 if(d==1) 19 sum*=x; 20 x*=x; 21 } 22 return sum; 23 }
1 int main() 2 { 3 //主函数测试 4 cout<<"输入整数x和n:(n>0)"; 5 int x,n; 6 double s; 7 cin>>x>>n; 8 s=pow(x,n); 9 cout<<s<<endl; 10 return 0; 11 }