/*题意就是给出整数n和k n表示这个计算器能显示的位数
k表示要计算的数字 要算k的平方 结果取高n位 再平方 再取高n位
求这个过程最大的值是多少 那么这个过程必然是循环的
stringstream虽然慢 但是一种不错的方法
还有floyd判圈法 就是两个小孩 一个速度是另一个的两倍
当第一个小孩跑了n步 也就是一个循环节的时候
第二个已经跑了2n 两个循环节 这时候他俩相等了 都等于初始的那个值
*/
#include <iostream>
#include <sstream>
#include <set>
#include <cstdio>
using namespace std;
typedef long long LL;
int next(int n,int k)
{
//stringstream 是很好用的方法 但是T掉了。。。
stringstream ss;
ss << (LL)k*k;
string str=ss.str();
if(str.size()>n)
str=str.substr(0,n);
stringstream ss2;
ss2<<str;
int ans;
ss2>>ans;
return ans;
}
int main()
{
int T;
scanf("%d",&T);
int n,k,k1,k2,i,j,ans;
while(T--)
{
scanf("%d%d",&n,&k);
ans=k1=k2=k;
set<int> se;
while(!se.count(k))
{
se.insert(k);
k=next(n,k);
if(k>ans) ans=k;
}
/*
do{
k1=next(n,k1);if(k1>ans) ans=k1;
k2=next(n,k2);
k2=next(n,k2);
}while(k1!=k2);
*/
printf("%d\n",ans);
}
return 0;
}
uva 11549 Calculator Conundrum(Floyd 判圈法 和 stringstream的应用)
最新推荐文章于 2019-05-08 21:02:00 发布