UVA 11549-Calculator Conundrum-floyd判重

来源:互联网 发布:阿里云免费证书配置 编辑:程序博客网 时间:2024/05/29 23:47

给n,k

计算机只能显示前n位数字,,请一直给k作平方运算。。。得到结果不断取前n位。。。。

问能得到的最大的数字是多少(最多n位)


1、暴力 判重,遇到重复的就停止    563ms

2、flody判重    226ms



暴力方法 563ms

#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <set>#include <vector>using namespace std;long long min(long long a,long long b){return a<b?a:b;}set<long long> sb;long long n,k;char tm[105]; long long get_pre_n_num(long long k) //得到前n个数字{  long long i;long long j=0;long long tmp=k;while(tmp)//数字转字符串 {tm[j++]=tmp%10+'0';tmp=tmp/10; }tm[j]=0;for(i=0;i<j/2;i++)  //逆转swap(tm[i],tm[j-i-1]);tm[n]=0;long long ret=0;int len=min(n,j);////取前n个数字 returnfor (i=0;i<len;i++)tmp=tmp*10+tm[i]-'0';return tmp;}int  main(){long long i,j;int t;cin>>t;while(t--){sb.clear();scanf("%lld%lld",&n,&k);if (k==0) {printf("0\n");continue;} sb.insert(k); while(1){ k=k*k; long long ss=num_to_char(k,tm); //取前n个数字k=ss;//直接用前n个数字平方即可if (sb.find(ss)!=sb.end()) //如果重复了则退出break;sb.insert(ss);}set<long long>::iterator it=sb.end();if (it!=sb.begin())//取最大的it--;long long sss=*it;printf("%lld",sss);printf("\n");}return 0;}


0 0