题意:
求n^k的前三位和后三位。
思路:
后三位很好求,快速幂取模就行了,注意n的大小为int上限,所以要用long long 防溢出。
前三位就要看保留位数,n^k==(10^(log10(n))) ^ k==10^(log10(n)*k),所以(log10(n)*k)的整数部分决定结果的位数,小数部分决定结果的数字。
代码:
int n,m;
int flag,sum,ave,ans,res,len,ans1,ans2;
long long power(long long x,long long k,long long mod)
{
long long ans = 1;
while(k)
{
if(k & 1) ans=ans*x%mod;
x=x*x%mod;
k >>= 1;
}
return ans;
}
int main()
{
int i,j,k,kk,t,x,y,z;
scanf("%d",&k);
kk=0;
while(k--)
{
scanf("%d%d",&n,&m);
res=100*pow(10,(log10(double(n)))*m-int(log10(double(n))*m));
ans=(int)power(n,m,1000);
printf("Case %d: %03d %03d\n",++kk,res,ans);
}
return 0;
}