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

时间:2014-03-18 13:27:13

标签: 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{
    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();
    }   


  }
}

3 个答案:

答案 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是否在范围内等等。