代码:
package 文件读取子数组最大值; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.math.BigInteger; public class Max { public static void main(String[] args) throws FileNotFoundException { BufferedReader read = new BufferedReader(new FileReader("G:\workspace\Text1.txt")); String s; BigInteger max = new BigInteger("0"); BigInteger ans = new BigInteger("0"); BigInteger n = new BigInteger("0"); BigInteger[] a = new BigInteger[100]; int i = 0; try { while((s = read.readLine()) != null) { try { BigInteger n1 = BigInteger.valueOf(Long.parseLong(s)); n = n1; // System.out.println(n+";;;"); }catch(NumberFormatException e) { System.err.println("输入之中包含非法字符!"); break; } ans = ans.add(n); //System.out.println(ans); if(ans.compareTo(n)>=0) {// 1 -2 3 a[i] = ans; if(max.compareTo(a[i])<=0) { max = a[i]; // System.out.println(a[i]+".."); } }else { ans = n; a[i]= n; if(max.compareTo(a[i])<=0) { max = a[i]; // System.out.println(a[i]+"...."); } } i++; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(max); } }
截图:
接替思路:为防止溢出,采用BigInteger大数据类型的变量进行操作,将文件中数都进去之后,将数进行加法操作,如果和大于当前数值,就将和储存到数组中,小于则将当前数值存储到数组中,在和ans 的值变为当前数值的值。最后将数组之中的所存数据进行比较,求最大值。
下面再附着一些大数据运算的具体方法。
方法名称 | 说明 |
---|---|
add(BigInteger val) | 做加法运算 |
subtract(BigInteger val) | 做减法运算 |
multiply(BigInteger val) | 做乘法运算 |
divide(BigInteger val) | 做除法运算 |
remainder(BigInteger val) | 做取余数运算 |
divideAndRemainder(BigInteger val) | 做除法运算,返回数组的第一个值为商,第二个值为余数 |
pow(int exponent) | 做参数的 exponent 次方运算 |
negate() | 取相反数 |
shiftLeft(int n) | 将数字左移 n 位,如果 n 为负数,则做右移操作 |
shiftRight(int n) | 将数字右移 n 位,如果 n 为负数,则做左移操作 |
and(BigInteger val) | 做与运算 |
or(BigInteger val) | 做或运算 |
compareTo(BigInteger val) | 做数字的比较运算 |
equals(Object obj) | 当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false |
min(BigInteger val) | 返回较小的数值 |
max(BigInteger val) | 返回较大的数值 |