小明正看着 203879 这个数字发呆。原来,203879 * 203879 = 41566646641这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
注意:用int会超出,用 long long int
`#include <iostream>
using namespace std;
int main()
{
int ii[6];
for (long long int i = 123456; i < 987654; i++)
{
int a = 1;//标记第2个要求是否通过
int b = 1;//标记第3个要求是否通过
int k = 0;
long long int h = i;
while (h)//记录每一位数字
{
ii[k++] = h % 10;
h /= 10;
}
long long int hi = i;
int t = 0;//记录位数
while (hi)//判断是否每一位都不同
{
int hh = hi % 10;
for (int j = 0; j < 6; j++)
{
if (t != j && hh == ii[j])
{
a = 0;
break;
}
}
if (a == 0) break;
hi /= 10;
t++;
}
if (a == 0)continue;
long long int s = i * i;
while (s)//判断是否平方和不重复原来的数
{
int ss = s % 10;
for (int jj = 0; jj < 6; jj++)
{
if (ss == ii[jj])
{
b = 0;
break;
}
}
if (b == 0)
break;
s /= 10;
}
if (b == 0)
continue;
cout << i << endl;
//答案:639172
}
}`