从理论上讲,d=Math.sqrt(i),那么d*d==i一定是true,只是由于精度问题,才有可能d*d不等于i。不能用这种方法来判断。
既然是求完全平方数,当然是平方根是整数的数,可以用(int) d == d来判断。
代码:
public static void main(String[] args) {
int a = 0;
for (int i = 1; i <=2000; i++) {
double d = Math.sqrt(i);
// 判断平方根是不是整数
if ((int) d == d) {
System.out.print(i + " ");
a++;
if (a % 10 == 0) {
System.out.println();
}
}
}
}
执行结果:
1 4 9 16 25 36 49 64 81 100
121 144 169 196 225 256 289 324 361 400
441 484 529 576 625 676 729 784 841 900
961 1024 1089 1156 1225 1296 1369 1444 1521 1600
1681 1764 1849 1936
共有44个
d=Math.sqrt(i);返回是个double,你的double×double == int 是有很多可能的。
比如11的开平方是3.3166...,3.3166...×3.3166...= 10.999... 浮点数比较认为在某个精度范围内,
10.999...是等于11.000的。所以按你的程序,11是完全平方数。