题目大意:有一个计算器,只能显示n位数,输入一个数m进行反复的平方,问计算器显示的最大的数是多少
解题思路:用一个map记录计算器上显示的每一个数字,如果出现重复了,则表示形成了一个循环了,这样就不用再继续计算了,再计算的时候用MAX记录显示的最大的数即可
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
int main() {
int test;
scanf("%d",&test);
while(test--) {
long long n, k, MAX = 0;
scanf("%lld%lld",&n, &k);
map<int,int> m;
while(!m.count(k)) {
m[k]++;
MAX = max(MAX,k);
k = k * k;
int bit = log10(k) + 1;
long long temp = pow(10,bit-n);
if(bit > n)
k = k / temp;
}
printf("%lld\n",MAX);
}
return 0;
}