如何指定给定数字是不是具有整数平方根? [复制]

Posted

技术标签:

【中文标题】如何指定给定数字是不是具有整数平方根? [复制]【英文标题】:How do I specify whether a given number has a whole number square root? [duplicate]如何指定给定数字是否具有整数平方根? [复制] 【发布时间】:2015-08-11 20:47:06 【问题描述】:

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

我尝试放置各种 % 展示位置,但无济于事。我在网上找到的解决方案没有使用我想要的 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);
    

【问题讨论】:

【参考方案1】:

要知道给定数字是否具有完美平方根,您可以尝试如下所示 -

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

如果一个数有一个完全平方根,那么这个数本身就是一个完全平方。

会有帮助的!

【讨论】:

if (m%10 is not one of (0, 1, 4, 5, 9)) return false; else return 布鲁斯的逻辑; @ElgsQianChen 我认为我给出的逻辑已经足够了,不是吗? 是的,它只是 mod 操作比平方根操作便宜得多。但坦率地说,在大多数情况下,如果代码不是很频繁地执行,我并不关心。但是,如果您从事游戏编程,那么这项检查可能非常值得。 好的,明白了! @ElgsQianChen 但是如果 m 是 36 呢?然后根据你的逻辑它会返回 false,虽然 36 是一个完美的正方形。

以上是关于如何指定给定数字是不是具有整数平方根? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何找到满足条件的数字的确切数量? [复制]

找到数字平方和与给定数字相加的最小整数

R语言数学函数:abs绝对值sqrt平方根ceiling向上近似整数floor向下近似整数trunc去除小数部分round近似到指定小数位signif近似到有效数字三角函数指数对数

如何复制数组中不同次数的元素?

有人知道找出一个数字的逻辑是不是是完美平方吗? [复制]

如何检查设备是不是具有给定的功能? [复制]