0

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

例子:

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);
    }
}

我想要的输出应该是这样的:

在此处输入图像描述

4

4 回答 4

1

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

for(int i = 1; i <= Math.sqrt(1000); i++) {
    System.out.println(i*i + " - " + i);
}
于 2016-03-19T17:03:36.543 回答
1

可以解决您的请求的技巧也在数学课中,

Math.floor(...) 

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

例子:

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);
            }
        }
于 2016-03-19T17:01:27.063 回答
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将等于零。

于 2016-03-19T17:14:31.850 回答
0

您解决此问题的方法略有缺陷。

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

我会这样做:

for(int i = 0; i < Math.sqrt(1000); i++) {
    System.out.println((i+1)^2 + " - " + i);
}
于 2016-03-19T17:33:55.393 回答