题目描述:
小明正看着 203879 这个数字发呆。 原来,203879 * 203879 = 41566646641这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
-
6位正整数
-
每个数位上的数字不同
-
其平方数的每个数位不含原数字的任何组成数位
输入:
输出:
输出这另一个数字
样例输入
无
样例输出
无*/
思路:
这里最需要注意的就是,两个六位数相乘之后,就是个大数了,这个时候就需要使用高精度方法了。
举个例子:
123 * 123
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int num[6];
int flag[10];
bool ok1(int n)
{
int t = 0;
while(n)
{
if(flag[n % 10]) return false;
flag[n % 10]++;
num[t++] = n % 10;
n /= 10;
}
return true;
}
bool ok2(int n)
{
int t = 0;
for(int i = 0 ; i < 6 ; i++)
{
t += num[i] * n;
if(flag[t % 10]) return false;
t /= 10;
}
while(t)
{
if(flag[t % 10]) return false;
t /= 10;
}
return true;
}
int main()
{
for(int i = 123456 ; i <= 987654 ; i++)
{
memset(flag, 0, sizeof(flag));
if(!ok1(i)) continue;
else{
if(ok2(i)) cout << i << endl;
}
}
}