这道题很奇葩啊,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(); ///关闭流,只是养成好习惯吧。。。 } }
时间: 2024-10-14 19:06:51