【从左至右】
#include <stdio.h>
#define N 100
double left(int p[],int i,int a)//幂从左至右
{
double t=1;
for(;i>=0;i--)
{
if(p[i]==1)
t=t*t*a;
else
t=t*t;
}
return t;
}
int main()
{
int p[N],i=0,a,n;
double sum;
printf("本程序计算a^n,请输入a,n:\n");
scanf("%d%d",&a,&n);
while(n)
{
p[i++]=n%2;
n/=2;
}
i--;
sum=left(p,i,a);
printf("%.0lf\n",sum);
}
【从右至左】
#include <stdio.h>
double right(int a,int n)//从右至左计算a^n
{
double t;
t=1;//确定sum的初值
while(n)
{
if(n%2==1)
t*=a;
a*=a;
n/=2;
}
return t;
}
int main()
{
int a,n;
double sum;
printf("本程序计算a^n,请输入a,n:\n");
scanf("%d%d",&a,&n);
sum=right(a,n);
printf("%.0lf\n",sum);
}