小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
- 6位正整数
- 每个数位上的数字不同
- 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。
Code
C++
#include <iostream>
#include <sstream>
#include <cstring>
#include <string>
using namespace std;
void i2s(long long num,string &str)
{
stringstream ss;
ss<<num;ss>>str;
}
bool check(long long i1,long long i2)
{
string s1,s2;
i2s(i1,s1);i2s(i2,s2);
for(long long i=0;i<s1.length();i++)
if(s2.find(s1[i])!=string::npos) return false;
return true;
}
int main()
{
for(int a=1;a<10;a++)
for(int b=0;b<10;b++)
if(b!=a)
for(int c=0;c<10;c++)
if(c!=a&&c!=b)
for(int d=0;d<10;d++)
if(d!=a&&d!=b&&d!=c)
for(int e=0;e<10;e++)
if(e!=a&&e!=b&&e!=c&&e!=d)
for(int f=0;f<10;f++)
if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e)
{
long long i1=a*100000+b*10000+c*1000+d*100+e*10+f;
long long i2=i1*i1;
if(check(i1,i2)) cout<<i1<<endl;
}
return 0;
}
Python
if __name__ == '__main__':
for num in range(100000, 1000000):
square = num ** 2
if len(set(str(num))) == 6 and not (set(str(num)) & set(str(square))):
print(f'{num} * {num} = {num ** 2}')
203879 * 203879 = 41566646641
639172 * 639172 = 408540845584