思路挺简单的,

1)对指数进行奇偶判断,如果是奇数应先乘以'底数'取余,如果是偶数则继续

2)不停地将指数除以二,而且 对'底数'相乘取余得一个新的‘底数’

#include<stdio.h>
int fp(long long a,long long b,long long c)//a底数,b指数,c保留位数
{
    int ans=1;
    a=a%c;
    while(b>0)
    {
        if(b%2==1) ans=(ans*a)%c;
        b/=2;
        a=(a*a)%c;
    }
    return ans;
}
int main()
{
    long long a,b;
    while(scanf("%lld%lld",&a,&b)&&a&&b)
        printf("%d\n",fp(a,b,1000));
    return 0;
}