平方十位数

/*
   标题:平方十位数
   由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
   这其中也有很多恰好是平方数(是某个数的平方)。
   比如:1026753849,就是其中最小的一个平方数。
   请你找出其中最大的一个平方数是多少?
   
   思路1:
   1.枚举答案 X[9876543210,1026753849]
   2.判断是不是恰好0-9十个数字
   3.判断是不是完全平方数
      令Y=int(sqrt(X))
	  判断 Y*Y==X;

   缺点:时间复杂度10^10,超时

   思路2:
   换种枚举方式
   1.枚举X的平方根Y[100000,32043]
   2.运用set容器
 */
#include <iostream>
#include <set>
using namespace std;
bool contain(long long x)
{
	if (x==0)
	{
		return false;
	}
	set<long long> s;
	//分离x的各位数字,每次把x的末尾数字分离出去
	while (x)
	{
		long long d = x % 10;
		s.insert(d);
		x /= 10;
	}
	return s.size() == 10;
}
int main()
{
	for (long long i = 32043; i <=100000;++i)
	{
		long long x = i*i;
		if (contain(x))
		{
			cout << x << endl;
		}
	}
	return 0;
}
答案:9814072356

猜你喜欢

转载自blog.csdn.net/m0_37806112/article/details/80572096