思路: 这个思路比较简单,因为我们要求最后三位,而熟悉乘法的都知道,如果求 a * b 的后三位,则其结果,只与 a 的后三位和 b 的后三位有关,所以我们要求a^b这个结果,只需要一直乘 a 的后三位即可,这时还有比较简单的方法,就是一直指数 * 2 ,即 1、2、4、8、16 这种,即一直自己乘自己,而不是一直乘 a 的后三位这种,每次只自增 1 的这种操作。
代码如下:
#include<stdio.h>
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
if(a==0&&b==0) break;
int ans=1;
while(b!=0){
if(b%2==1){//因为涉及到二分的问题,所以需要判断奇偶数,
ans*=a;//如果是奇数,就先乘上一个a的后三位
ans%=1000;
}
b/=2;
a*=a;//二分求幂的核心
a%=1000;
}
printf("%d\n",ans);
}
return 0;
}
注意:这里b一直二分。a一直自乘。b一直下降。a的幂次一直上升。但是他们的下降次数和上升次数一定的,相同的。