五个连续数字的最大产品

时间:2013-04-30 21:15:02

标签: java parsing java.util.scanner

我正在尝试将50个字符的String对象解析为整数。我一直在尝试扫描包含100行(每行50位数字)的数据文件,并计算数字的总和。

每次我尝试将String解析为整数时,调用都会抛出 NumberFormatException

这是我到目前为止所拥有的......

{
    long totalSum = 0;
    ArrayList<Long> list = new ArrayList<Long>();

    // Create a new JFileChooser object.
    JFileChooser fileChooser = new JFileChooser(
            "C:\\Users\\Jon\\workspace\\Project Euler\\src");

    // Create an "Open File" Dialog box for
    // the user.
    fileChooser.showOpenDialog(null);

    // Get the file the user selects.
    File inputFile = fileChooser.getSelectedFile();

    try
    {
        Scanner in = new Scanner (inputFile);

        String nextString = "";

        // If the scanner has another token to scan,
        // continue with the loop.
        while (in.hasNext())
        {
            // The next string is the next number of characters
            // that are not seperated by white space.
            nextString = in.next();

            try {

                ing nextNumber = Integer.parseInt(nextString);
                list.add(nextNumber);

            } catch (NumberFormatException e) {
                System.out.println ("NumberFormatException: " + e.getMessage());
            }

        }

        in.close();

我在尝试解析之前尝试过“修剪”String对象,但是没有任何东西需要修剪。我正在扫描的线条中没有任何空白区域。

以下是我尝试扫描并计算以下值的几行:

37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629

我检查了API,并通过堆栈进行了彻底搜索。任何人都知道怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

您的号码太大,无法容纳int,范围为-21474836482147483647。它们也太大而不适合long,范围为-9223372036854775808L9223372036854775807L。如果它不适合数据类型的范围,则抛出NumberFormatException

您可能想尝试将数字解析为double

double nextNumber = Double.parseDouble(nextString);

但这可能会失去一点精确度。 Double具有53位精度,适用于大约16位数。使用double,您将失去精确度。

要保持精确度,请使用BigInteger

BigInteger nextNumber = new BigInteger(nextString);

BigInteger是任意精度,不会失去任何精度。您可以在BigIntegers

之间直接使用基本算术和比较