平方数 Java

4

"一个数组用于存储十个整数。编写Java程序确定并打印给定数组中既是平方数又是奇数的数字."

我的问题是如何确定数组中的数字是否为平方数。我尝试过这种方法,但结果不正确!

import java.math.*;
public class JavaApplication43 {

    public static void main(String[] args) {

        int[] no = {22, 44, 25, 89, 81, 55, 23, 25, 55};

        for (int i = 0; i < no.length; i++) {

            int x = no[i];
            double y;
            if (x % 2 != 0) {
                y = Math.sqrt(x);
                if (x == (Math.pow(y, 2))) 
                    System.out.println(no[i]);
            }
       }
   }
}

这是它给我的输出结果。
run:
25
81
55
25
55

55也在其中,这意味着我使用的方法不成功!


我猜你的意思是这些数字必须只是整数的平方,因为每个正数都是某个实数的平方。因此,您可以检查y是否为整数(即分数部分为0或由于精度问题至少非常小)。 - Thomas
请查看此链接:https://dev59.com/X3VC5IYBdhLWcg3wbglT - greenPadawan
3个回答

5
您可以这样做:

for (int i = 0; i < no.length; i++) {
    int x = no[i];
    if (x % 2 == 0) continue;
    int y = (int) Math.sqrt(x);
    if (x == y * y) { 
        System.out.println(x);
    }
}

如果这是一个要求,为什么他不能消除偶数呢? - Thomas
@PeterLawrey,例如? :) - Konstantin Yovkov
1
@KonstantinYovkov 这个数字必须很大,比你可以在 int 值中获得的要大得多。 ;) - Peter Lawrey
但在数组中使用整数 - isharailanga
由于精度问题,您可能会得到一个小数.99999999,而不是下一个更高的整数,截断将导致错误的值。 - Thomas
1
@laish129 大多数情况下,整数的平方根仍然是双精度浮点数。 - Thomas

5
您可以通过检查一个数的平方根是否为整数来确定它是否是一个完全平方数。
double sqrt = Math.sqrt(x);
long sqrt2 = Math.round(sqrt);
if (Math.abs(sqrt - sqrt2) / sqrt < 1e-15)
   // we have a square.

如果你知道x是一个int,你就不应该出现四舍五入误差,可以这样做:

int x = ...
double sqrt = Math.sqrt(x);
if ((int) sqrt == sqrt)
    // we have a square.

这个模式可以使用到 double 精度的极限,尽管 int 不会测试这些极限。 - Peter Lawrey

2

希望这会更容易一些,


涉及IT技术相关内容。
    if((arr[i]%2 != 0) & (Math.sqrt(arr[i])%1 == 0)){
        System.out.println(arr[i]);
    }

在这个if条件语句中,首先我通过取模运算来检查数字是否为奇数,第二个条件是检查数字是否为完全平方数。首先我获取给定数字的平方根,然后进行1的模除并检查是否等于0。如果数字是一个完全平方数,那么该数字的平方根就是一个整数,当我对一个整数进行模除时,答案应该等于0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接