uva-465(overflow)

这道题很奇葩啊,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();                            ///关闭流,只是养成好习惯吧。。。  
    }
}
原文地址:https://www.cnblogs.com/ya-cpp/p/4030013.html