UVa 11549 - Calculator Conundrum(Floyd判圈法)

来源:互联网 发布:opta数据 编辑:程序博客网 时间:2024/05/16 15:47

现在输入一个整数k,每次取前n位,反复平方,一直下去,输出能得到的最大数。每次取前n位所以一定会出现循环,使用Floyd判圈法判断是否出现重复。输出循环中的最大值。

#include<cstdio>#include<algorithm>typedef long long LL;using namespace std;int buf[100];int Next(int n,int k){    if(!k) return 0;    LL k2=LL(k)*k;    int l=0;    while(k2>0){        buf[l++]=k2%10;        k2/=10;    }    n=min(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);        int ans=k,k1=k,k2=k;        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("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击