求后3位,快速幂取模
求前3位:
对于n^k这个数,可以用10 ^p表示(p为浮点数),
10^p=n ^k,
那么p=k*log10(n)
用整型数x表示p的整数部分,用浮点数y表示p的小数部分,0<=y<1。
那么10^p=10 ^(x+y)=(10 ^y) * (10 ^x)。即相当于用科学计数法表示,那么求前3位只要用(10 ^y) *100即可。
Leading and Trailing LightOJ - 1282

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int mod=1000;
ll n,k;
ll POW(ll a,ll b)
{
    ll res=1;
    while(b)
    {
        if(b&1)
            res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res%mod;
}
int main()
{
    int t,cas=0;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld%lld",&n,&k);
        double p=k*log10(n);//cout<<p<<endl;
        ll x=(ll)p;
        double y=p-x;
        int ans1=(int)(pow(10.0,y)*100);
        int ans2=(int)POW(n,k);
        printf("Case %d: %d %.3d\n",++cas,ans1,ans2);
    }
    return 0;
}