问题是找到两个数字之间的平方数。
下面的代码可以处理小数字,但是数字很大。我怎么能纠正这个?
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();
}
}
}
答案 0 :(得分:14)
您确定方块的技术(转换为字符串并在点上分割)很狡猾。
这也是不必要的 - 你可以在一行中使用纯粹的数字方法:
int low, high; // fill from input
int numOfSqrt = (int) (Math.floor(Math.sqrt(high)) - Math.ceil(Math.sqrt(low)) + 1);
答案 1 :(得分:1)
这是一种更简单的算法,相对快速地可以达到100,000,000。
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);
}
答案 2 :(得分:0)
我建议找到平方根作为输入中给出的第一个数字,让我们把它取为10,平方根就像3.(有些东西)现在取4并检查16是否在范围内像5那样检查25是否在范围内等等。