#include<stdio.h>
int a,b;
void input()
{
int pow1();
while(scanf("%d%d",&a,&b)==2)
{
pow1();
}
}
void pow1()
{
int r,base;
base=a;
r=1;
while(b!=0)
{
if(b%2)
{
r=r*base;//把结果保留到r当中
}
base=base*base;
b=b/2;//每次进行缩半,对base=base*base这一步起到约束作用
}
printf("%d\n",r);
}
int main()
{
input();
return 0;
}
二分算法
求a^b
二分法:
此处b=b/2;体现二分
base=a;
base=base*base;
可推出a^2,a^4,a^8,a^16..........
所以当b为2^n时
可用如下代码:while(b!=1)
{
base=base*base;
b=b/2;
}
当b不为2^n时
比如b=6;
则按上述代码:
base=a^2; b=2;
base=a^4; b=1
求出结果为a^4,不符,
我们可以观察到a^2和a^4,如果2+4就变成6了,求出结果为a^6
所以只需加个判定条件
我们可以看到a^2时,b=3
所以加个if(b%2)
r=r*base;
同时把while(b!=1)变为while(b)