1091 N-自守数 (15分)

如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数。

本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。

输入格式:

输入在第一行中给出正整数 M(≤),随后一行给出 M 个待检测的、不超过 1000 的正整数。

输出格式:

对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK2 的值,以一个空格隔开;否则输出 No。注意题目保证 0。

输入样例:

3
92 5 233
			

输出样例:

3 25392
1 25
No
			
#include<iostream>
#include<string>
using namespace std;
int main()
{
	int n;
	string s,s1,s2;
	while (cin >> n)
	{
		for (int i = 0; i < n; i++)
		{
			cin >> s;
			int x = stoi(s);
			int flag = 0,pos;
			for (int j = 1; j < 10; j++)
			{
				int y = x * x * j;
				s1 = to_string(y);
				s2 = s1.substr(s1.size() - s.size(), s.size());
				if (s2 == s)
				{
					pos = j;
					flag = 1;
					break;
				}
			}
			if (flag == 1)
				cout << pos << " " << s1 << endl;
			else
				cout << "No" << endl;
		}
	}
	return 0;
}