问题描述
设计一个算法,求解a的n次幂问题。
输入描述
输入一行两个正整数a,n,分别表示底数与指数
输出描述
输出一个整数,表示a的n次幂
输入样例
2 15
输出样例
32768
参考代码
朴素算法
#include<stdio.h>
long long int ans(long long int a,int n){
//通过对a的累乘得到答案,时间复杂度为O(n)
long long int ans=1;
for(int i=0;i<n;i++)
ans*=a;
return ans;
}
int main(){
int a1,n;
scanf("%d%d",&a1,&n);
long long int a2=a1;
printf("%lld\n",ans(a2,n));
return 0;
}
优化算法
#include<stdio.h>
long long int ans(long long int a,int n){
//优化:先求a的平方,之后求平方的平方即四次方,依此类推使时间复杂度折半
if(n==0)return 1;
long long int sum=a;
int ex=1;
while((ex<<1)<=n)
{
sum*=sum;
ex<<=1;
}
return sum*ans(a,n-ex);
}
int main(){
int a1,n;
scanf("%d%d",&a1,&n);
long long int a2=a1;
printf("%lld\n",ans(a2,n));
return 0;
}