题目大意:
一个损坏的计算机,只能显示n位,现在你用一个数K不断的平方,只能保留最高n位,求最大的那个数是多少。
思路:
数字的出现会出现循环的情况,每次记录下最大的数,当出现循环就退出,输出最大的数,用STL中的set判断是否出现重复的数字。
代码:
#include <iostream>
using namespace std;
#include <cstring>
#include <stdio.h>
#include <set>
int buf[100];
int next(int n,int k) {
if(!k) return 0;
long long a = (long long)k*k;
int L = 0;
while(a > 0) {
buf[L++] = a % 10;
a /= 10;
}
if(L < n) n = L;
int ans = 0;
for(int i = 0 ; i < n ; i++) {
ans = ans * 10 + buf[--L];
}
return ans;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
int n,k;
scanf("%d %d",&n,&k);
set<int> s;
int ans = k;
while(!s.count(k)) {
s.insert(k);
if(k > ans ) ans = k;
k = next(n,k);
}
printf("%d\n",ans);
}
return 0;
}