此代码适用于某些输入。 但是对于更高的输入值(例如 1000000),我得到一个 NumberFormatError。 输入(取自 s[])的值范围为 1-2000000 可能是什么原因?
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
try
{
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
int no=Integer.parseInt(read.readLine());
String s[]=read.readLine().split(" ");
int result=0;
for(int i=0; i<no; i++)
{
result+= Integer.parseInt(s[i]);
if(result<0)
result=0;
}
System.out.println(result);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
最佳答案
在您的 for 循环中,您输入的第一个数字是数组的大小。到目前为止,这就是您的逻辑。除非您实际手动加载 2,000,000 个数字(或复制/粘贴),否则将抛出 ArrayIndexOutOfBoundsException
。 .
你会得到一个 NumberFormatException
如果您要输入非数字作为第二个输入,或者输入大于 Integer.MAX_VALUE
的数字(2147483647) 或小于 Integer.MIN_VALUE
(-2147483648)。
输入类似:
1000000
2 1 2 1 2 1 /*... 999990 digits later ...*/ 2 1 2 1
使程序正确终止。这是我使用的输入文件,如果有人需要的话:http://ge.tt/95Lr2Kw/v/0
该程序是通过命令提示符手动编译和运行的,如下所示:java Solution < in.txt
.
编辑:我只记得数组中的输入值可能大到 2000000。你必须使用 BigInteger
持有result
值高达 2000000^2。
关于java - 大输入的数字格式异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19607531/