算法竞赛训练指南, 42 页
注意:
1、 用数组来记录一个数的各位的数字
2、 快慢指针来记录链表环的入点(Floyd 判圈算法)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int N, K, Test;int next(int n, int k)
{
if(0 == k){
return 0;}int ans = 0;int buf[100];long long k2 = (long long)k * k;int cnt = 0;while(k2){
buf[cnt++] = k2 % 10;k2 /= 10;}if(n > cnt){
n = cnt;}for(int i = 0; i < n; ++i) //返回高位的 n 位{
ans = ans * 10 + buf[--cnt];}return ans;}int main()
{
scanf("%d", &Test);while(Test--){
scanf("%d%d", &N, &K);int k1 = K, k2 = K;int ans = 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;
}/* 2 1 6 2 99 *//* 9 99 */