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,我将尝试它