Java 计算两个数字之间的平方数,只适用于小数字,为什么?

Java 计算两个数字之间的平方数,只适用于小数字,为什么?,java,Java,问题是找到两个数之间的平方数 下面的代码对小数字有效,但对大数字无效。我怎样才能纠正这个问题 import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class NumOfSqrs { public static void main(String[] args) { try{ BufferedRe

问题是找到两个数之间的平方数

下面的代码对小数字有效,但对大数字无效。我怎样才能纠正这个问题

 import java.io.*;
 import java.util.*;
 import java.text.*;
 import java.math.*;
 import java.util.regex.*;

 public class NumOfSqrs {


public static void main(String[] args) {

    try{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String input;
    int line = 0;
    int testCases;
    int numOfSqrt = 0;      
    int j = 0;  

    while((input=br.readLine())!=null){

        if(line == 0){
          testCases = Integer.parseInt(input);
          line = line +1;
        }
        else{
          String[] splitter = input.toString().split(" ");

          //Here splitter gives two numbers, we need to find no of sqrs b/w these numbers for eg say 3 and 9

           for(int i = Integer.parseInt(splitter[0]); i<=Integer.parseInt(splitter[1]) ; i++){

            String value = ""+Math.sqrt(i);
            String[] isSqrt = value.toString().split("\\.");
            //System.out.println(""+isSqrt[0] + "" + isSqrt[1]);

            //Here lets say if  'i' is 4 (i.e 2.0) then isSqrt[0] = 2, isSqrt[1] = 0 and if isSqrt[1] != 1 then its obvious that its not a perfect square

            if(isSqrt[1].length() == 1){
              numOfSqrt++;
            }

          }
          System.out.println(""+numOfSqrt);
        }
     numOfSqrt = 0;
    }


    }catch(IOException io){
        io.printStackTrace();
    }   


  }
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共类NumOfSqrs{
公共静态void main(字符串[]args){
试一试{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串输入;
内线=0;
int测试用例;
int numosqrt=0;
int j=0;
而((input=br.readLine())!=null){
如果(行==0){
testCases=Integer.parseInt(输入);
直线=直线+1;
}
否则{
String[]splitter=input.toString().split(“”);
//这里splitter给出了两个数字,我们需要找到SQR的编号,例如3和9

对于(int i=Integer.parseInt(splitter[0]);i我建议找到输入中给出的第一个数字的平方根,让我们将其取为10,平方根将类似于3。(有些东西)现在取4,检查16是否在范围内,像5一样,检查25是否在范围内,依此类推。

您确定正方形(转换为字符串并在点上拆分)的技术是不可靠的

这也是不必要的-您可以在一行中使用纯数值方法:

int low, high; // fill from input
int numOfSqrt = (int) (Math.floor(Math.sqrt(high)) - Math.ceil(Math.sqrt(low)) + 1);

这是一个更简单的算法,它的运算速度相对较快,可以达到100000000次

int low = 1, high = 100000000;
int max = 0;
int count = 0;

for (int j = low; j <= high; j++)
{
    while (max * max < j)
        max++;

    if (max * max == j)
        Console.WriteLine(max * max);
}
int低=1,高=100000000;
int max=0;
整数计数=0;

对于(int j=low;j也许codereview.stackexchange会是一个更好的论坛。您能指定您的程序的最大范围吗?类似的数字可以在0到1000000之间?或者确切地说是您能得到的最大值?您能说明您希望它在单例或多个查询中快速运行吗?所以重要的是问题是在更好的时间内回答3 10、1 10000和1 1000000,或者你更愿意优化单个操作的时间。所以你想只回答1个查询的问题吗?范围可以在1到10之间^9@MikeSamuelcodereview.stackexchange.com是关于要求改进工作代码的。帮助查找bug等lving已知问题是关于SO的主题,而非关于代码审查的主题。感谢ans,我将尝试它