本文主要是介绍UVA - 11549 Calculator Conundrum,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:一个计算器只会显示n位数字,输入一个K,反复平方,溢出的时候只会显示前n位数字,求这样下去能得到的最大值是多少,显然这是会出现循环的时候,所以用到了Floyd判圈算法
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
using namespace std;int temp;int next(int n,int k){long long res = (long long) k * k;while (res >= temp)res /= 10;return (int) res;
}int main(){int t;scanf("%d",&t);while (t--){int n,k;scanf("%d%d",&n,&k);set<int> s;temp = pow(10,n);int ans = k;
// while (!s.count(k)){
// s.insert(k);
// if (k > ans)
// ans = k;
// k = next(n,k);
// }int k1 = k,k2 = k;do{k1 = next(n,k1);k2 = next(n,k2);if (k2 > ans)ans = k2;k2 = next(n,k2);if (k2 > ans)ans = k2;} while (k1 != k2);printf("%d\n",ans);}return 0;
}
的
这篇关于UVA - 11549 Calculator Conundrum的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!