仅为整数

时间:2016-03-19 16:47:48

标签: java output square-root math.sqrt

我需要为整数输出平方根的结果。

示例:

1  - 1
4  - 2
9  - 3
16 - 4...

最多961 - 31 ...这是1000之前的最后一个平方根。

到目前为止,我有这个...但是,这显示所有数字的平方根直到1000,我想要全数字的平方根。

我该怎么办?

public class HelloWorld {
    public static void main(String args[]) {
        double i = 1;
        do {
            System.out.printf("%.0f\t%.0f\n", i, Math.sqrt(i));
            i++;
        } while (i <= 1000);
    }
}

我想要的输出应该如下所示:

enter image description here

4 个答案:

答案 0 :(得分:1)

可以解决您的请求的技巧也在Math类中,

Math.floor(...) 

该方法会将double舍入到较低的整数,因此您需要检查根和下层是否相同..

实施例

for (int j = 0; j < 1000; j++) {
            final double res = Math.sqrt(j);
            if (res == Math.floor(res)) {
                System.out.printf("%d\t%.0f\n", j, res);
            }
        }

答案 1 :(得分:1)

遍历所有1000个值并不高效。相反,请考虑以下代码:

for(int i = 1; i <= Math.sqrt(1000); i++) {
    System.out.println(i*i + " - " + i);
}

答案 2 :(得分:0)

试试这个解决方案

for (int i = 1; i <= 1000; i++) {
    double sqrt = Math.sqrt(i);
    if (sqrt % 1 == 0) {
        System.out.println(i + " " + (int) sqrt);
    }
}

对于int值sqrt % 1将等于零。

答案 3 :(得分:0)

您解决此问题的方法存在轻微缺陷。

  • 您可以立即知道最大数字,它是您所拥有限制的平方根的最低限度。所以对于NUL ....因此,你得到的最接近整数的是31平方,任何更大的都将大于1000
  • 另外,你有一个函数f 1000 => sqrt(1000) = 31.6,但是你循环遍历(x) = x^2值而不是x值,这将会产生更多的测试。

我会这样做:

f(x)