Java 如何指定给定的数字是否具有整数平方根?

Java 如何指定给定的数字是否具有整数平方根?,java,Java,如何修改我所写的内容,以指定用户输入的数字是否为完美正方形 我尝试过放置各种%的位置,但没有效果。我在网上找到的解决方案没有使用我想要的M.O 我将包括我在网上找到的一个解决方案,我认为,鉴于本书强调避免暴力技术,这个解决方案效率低下,而且似乎没有产生预期的效果 这个问题来自Java艺术与科学第5章,编程练习7 /** * This program tells the user whether the number they've entered returns a perfect squar

如何修改我所写的内容,以指定用户输入的数字是否为完美正方形

我尝试过放置各种%的位置,但没有效果。我在网上找到的解决方案没有使用我想要的M.O

我将包括我在网上找到的一个解决方案,我认为,鉴于本书强调避免暴力技术,这个解决方案效率低下,而且似乎没有产生预期的效果

这个问题来自Java艺术与科学第5章,编程练习7

/**
 * This program tells the user whether the number they've entered returns a perfect square. *
 */

import acm.program.*;
import java.lang.Math;

public class Squares extends ConsoleProgram {

    public void run() {
        println("This program determines whether the number you're about to enter is a perfect square");
        int s = readInt("Enter a positive number here: ");
        switch (s) {

        }

        if (isPerfectSquare(s)) {
            ;
        }
        {
            println((int) Math.sqrt(s));
        }
    }

    private boolean isPerfectSquare(int m) {
        int sqrt = (int) Math.sqrt(m);
        return (sqrt * sqrt == m);
    }
}
以下是我认为有缺陷的解决方案:

/*
 * File: PerfectSquare.java
 * -------------------------
 * This program test the isPerfectSquare(n) 
 * that returns true if the integer n is a 
 * perfect square.
 */
import acm.program.*;
import java.lang.Math;

public class Book extends ConsoleProgram {

    private static final int MIN_NUM = 1;
    private static final int MAX_NUM = 100000000;

    public void run() {
        int cnt = 0;
        for (int i = MIN_NUM; i <= MAX_NUM; i++) {
            if (isPerfectSquare(i)) {
                cnt++;
                println(cnt + ": " + (int) Math.sqrt(i) + ": " + i);
            }
        }
    }

    private boolean isPerfectSquare(int n) {
        int sqrt = (int) Math.sqrt(n);
        return (sqrt * sqrt == n);
    }
}
/*
*文件:PerfectSquare.java
* -------------------------
*此程序测试iPerfectSquare(n)
*如果整数n是a,则返回true
*完美的正方形。
*/
导入acm.程序。*;
导入java.lang.Math;
公共类图书扩展控制台程序{
私有静态final int MIN_NUM=1;
私有静态最终整数最大值=100000000;
公开募捐{
int-cnt=0;

对于(int i=MIN_NUM;i要知道给定的数字是否有一个完美的平方根,您可以尝试如下所示-

if((Math.sqrt(m))%1 == 0) {
   System.out.println("Number (m) has a Perfect Square-Root");
} else {
   System.out.println("Number (m) does not have a Perfect Square-Root");
}
若一个数有一个完美的平方根,那个么这个数本身就是一个完美的平方


如果(m%10不是(0,1,4,5,9)中的一个,{return false;}否则返回{Bruce's logic;},这将有帮助!

@ElgsQianChen我认为我给出的逻辑足够了,不是吗?是的,它只是mod运算比平方根运算便宜得多。但坦率地说,在大多数情况下,如果代码执行得不频繁,我不在乎。但是如果你是在游戏编程中,可能很值得做这个检查。好的,明白你的意思了!@ElgsQianChen但如果m是36呢?那么根据您的逻辑,它将返回false,尽管36是一个完美的正方形。