平方十位数
十位平方数0~9这10个数字不重复、不遗漏,可以组成很多10位数字。这其中也有很多恰好是平方数(是某个数的平方)。比如:1026753849,就是其中最小的一个平方数。请你找出其中最大的一个平方数是多少?
第一步 缩小范围
找到最大平方数,我们可以换一个思路,找到这个数的平方根 。1026753849的平方根是32043,9876543210的平方根近似是99380,那么此时锁定查找范围 [ 32043, 99380] 。
第二步 判断是否是符合标准的十位数
可以选择用set集合,判断是否为10位数,也可以用数组,查重。(个人觉得set集合更方便,不过我自己写的是使用数组,set集合是与别人对比时,觉得set可能更方便)
import java.math.BigInteger;
/**
* @author 作者: nuor
* @createDate 创建时间:2019年2月23日 上午8:12:47
*/
public class T1 {
public static void main(String[] args) {
int a = 98991;
for (int i = a; i > 32043; i--) {
BigInteger ai = BigInteger.valueOf(i);
ai = ai.multiply(ai);
String s = "" +ai;
//System.out.println(s);
int t = judge(s);
if(t == 1) {
System.out.println(""+ai);
return;
}
}
}
static int judge(String str){ // 判断是否符合标准
int a[] = new int[10];
if(str.length() < 10) return 0; // 表是不是
for (int i = 0; i < 10; i++) {
int t = str.charAt(i) - '0';
if(a[t] == 1)
return 0; // 重复表示不是
a[t] = 1;
}
return 1; // 表示无重复 是
}
}
输出结果