这道题很奇葩啊,WA了4发。。。妈的,用c++也不至于,输出竟然要原样输出。。。
例如:
0000000000000000006 * 000000000000001
输出是 0000000000000000006 * 000000000000001
而不是 6 * 1
import java.io.*;
import java.util.*;
import java.math.*; public class Overflow {
public static void main(String[] args){
Scanner sc = new Scanner(new BufferedInputStream(System.in));
BigDecimal bd1, bd2, bd3, ans;
String st1;
bd3 = new BigDecimal("2147483647"); ///int 4位 -2147483648 ~ 2147483647 既 0x7ffffff
while(sc.hasNextLine()){
st1 = new String(sc.nextLine());
System.out.println(st1); ///原样输出。。。
String[] str= st1.split("[\\+\\*]"); ///正则表达式,明天再写 split() 字符串分割方法 int i = 0, len = st1.length();
boolean flag = false;
while(i < len){
if((st1.charAt(i)) == '+'){ //String类中用于获取每一个字符的方法
flag = true;
}
i++;
}
bd1 = new BigDecimal(str[0].trim()); ///trim()方法,用于清空空格
bd2 = new BigDecimal(str[1].trim());
if(flag == true){
ans = bd1.add(bd2);
}else{
ans = bd1.multiply(bd2);
} if(bd1.compareTo(bd3) > 0){ ///compareTo()方法,用于比较两个对象间的大小, 返回 大于0 相当于 bd1 > bd3
System.out.println("first number too big");
}
if(bd2.compareTo(bd3) > 0){
System.out.println("second number too big");
}
if(ans.compareTo(bd3) > 0){
System.out.println("result too big");
}
}
sc.close(); ///关闭流,只是养成好习惯吧。。。
}
}