总的来说该题没有什么太大的思想要求,主要是运用了一个神奇的数学公式。
即在求前三位数的时候,求总的位数:t=log10((double)n)+1;之后再运用一个公式:n^k/10^(t-3);
#include<stdio.h>
#include<math.h>
int pow_mod(int a,int n,int m)
{
if(n==0)return 1;
int x=pow_mod(a,n/2,m);
long long ans=(long long)x*x%m;
if(n%2==1)ans=ans*a%m;
return (int)ans;
}
int main()
{
int n,k,T,head,tail,t;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
tail=pow_mod(n%1000,k,1000);
t=k*log10((double)n)+1;
for(head=100;log(head)<=k*log(n)-(t-3)*log(10);head++);
head--;
printf("%3d...%03d\n",head,tail);
}
return 0;
}