后三位用幂取模可以求出注意补0
总位数可利用t=k*log10((double)n)+1 向上取整求出
前三位根据方程head=n^k/(10^(t-3))求出
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int pow_mod(int a,int n,int m)
{
if(n==0)
return 1%m;
long long x=pow_mod(a,n/2,m);
x=(x*x)%m;
if(n%2)
x=(x*a)%m;
return (int)x;
}
int main()
{
int T,n,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
int t=k*log10((double)n)+1,head,tail;
tail=pow_mod(n%1000,k,1000);
for(head=100;log(head)<=k*log(n)-(t-3)*log(10);head++);
head--;
printf("%3d...%03d\n",head,tail);
}
return 0;
}