直接模拟暴力就可以了,利用set判断重复,需要注意的是每一步需要计算出这个数的位数,比较简单
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
typedef long long LL;
set<LL>vis;
int main(){
int T;
LL mod[20];
mod[0] = 1L;
for(int i = 1; i < 10; i++)
mod[i] = mod[i - 1] * 10;
scanf("%d",&T);
while(T--){
vis.clear();
int n;
LL k;
scanf("%d%lld",&n,&k);
LL ans = 0;
while(true){
if(vis.count(k)) break;
vis.insert(k);
ans = max(ans,k);
k = k * k;
//计算k的位数
LL e = k;
int v = 0;
while(e){
e /= 10;
v ++;
}
if(v > n){
k /= mod[v - n];
}
//printf("%I64d\n",k);
}
printf("%lld\n",ans);
}
return 0;
}