题目:
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,
并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
要求1:6位正整数
要求2:每个数位上的数字不同
要求3:其平方数的每个数位不含原数字的任何组成数位
实现代码:
package com.dj.zuoy1;
import java.util.*;
public class Number {
// 判断不同
public static Set bt(long x) {
Set t = new HashSet(); // hashset集合
String s = "" + x;
for(int i=0; i<s.length(); i++) {
t.add(s.charAt(i)); // charAt() 方法可返回指定位置的字符。
}
return t;
}
public static boolean f(int x) {
long y = (long)x * x;
Set a = bt(x);
Set b = bt(y);
if(a.size() != 6) {
return false;
}
a.retainAll(b);
// retainALL方法: 如果集合a中的元素都在集合b中则a中的元素不做移除操作,
// 反之如果只要有一个不在a中则会进行移除操作。
// 即:list进行移除操作返回值为:true反之返回值则为false。
return a.isEmpty();
//isEmpty() 方法分配了内存空间,值为空,是绝对的空
}
public static void main(String[] args) {
final int A =100000;
final int B =1000000;
for(int i=A; i<B; i++) {
if(f(i))
System.out.println(i);
}
}
}