题目链接:https://cn.vjudge.net/problem/UVA-11549#author=0
题意:给两个数n,k。一直平方k,取平方后的前n个数。例如:n=1,k=6得6 3 9 8。找出循环中最大的数
思路:Floyd判圈法,两个孩子跑一个圈,一个孩子是另一个孩子速度得两倍,两个孩子一定会相遇。
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
long long t,n,m;
long long Next(long long n,long long x)
{
x*=x;
long long w=0,s=x;
while(s)
{
s/=10;
w++;
}
for(long long i=w;i>n;i--)
{
x/=10;
}
return x;
}
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
long long k1=m,k2=m,ans=m;
do
{
k1=Next(n,k1);
k2=Next(n,k2);
ans=max(ans,k2);
k2=Next(n,k2);
ans=max(ans,k2);
}
while(k1!=k2);
printf("%lld\n",ans);
}
}