题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641。
这有什么神奇呢?仔细观察,203879 是个 66 位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的 6 位数还有一个,请你找出它!
再归纳一下筛选要求:
6 位正整数;
每个数位上的数字不同;
其平方数的每个数位不含原数字的任何组成数位。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<math.h>
using namespace std;
int t[10]; //存储6位数的各位数出现的次数
int b[10]; //存储6位数相乘后各位数出现的次数
void div(int i) {
for (int j = 0; j < 10; j++)
{
t[j] = 0;
}
while (i)
{
//cout << i % 10 << endl;
t[i % 10]++;
i = i / 10;
}
}
void judge(long long i) {
//cout << i;
for (int j = 0; j < 10; j++)
{
b[j] = 0;
}
while (i)
{
//cout << i % 10 << endl;
b[i % 10]++;
i = i / 10;
}
}
int main() {
int a = 0;
int flag;
for (int i = 203880; i < 1000000; i++)
{
flag = 0;
for (int j = 0; j < 10; j++)
{
t[j] = 0;
b[j] = 0;
}
div(i);
long long c = (long long)i;
//cout << c*c;
judge(c*c);
for (int j = 0; j < 10; j++)
{
if ((b[j]>0 && t[j]>0) || t[j]>1)
{
flag = 1;
break;
}
}
if (flag ==0)
{
cout << i;
break;
}
}
return 0;
}