1. 


/**
* Angewandte Mathematik, SS09, IFB 2C
* ACM Problem #465 Overflow
*
* @author David Leib
* @author Julius Tschannerl
* @version 1.0, 03/23/2009
*
* Status : Accepted
* Runtime: 0.096
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Main {

public static void main(String... args) throws IOException
{
BigInteger result = new BigInteger("0");
BigInteger max = new BigInteger(Integer.toString(Integer.MAX_VALUE));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
while (line != null)
{
System.out.println(line);
StringTokenizer st = new StringTokenizer(line);
BigInteger op1 = new BigInteger(st.nextToken());
String operand = st.nextToken();
BigInteger op2 = new BigInteger(st.nextToken());
if (op1.compareTo(max) > 0)
System.out.println("first number too big");
if (op2.compareTo(max) > 0)
System.out.println("second number too big");
if (operand.equals("+"))
result = op1.add(op2);
else
result = op1.multiply(op2);
if (result.compareTo(max) > 0)
System.out.println("result too big");
line = br.readLine();
}
}
}

2.

/* Angewandte Mathematik, SS09, IFB 2C
* ACM Problem #465 (Overflow)
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1755
*
* @author Dennis Wilfert
* @author Johann Studt
* @version 1.0, 05/21/2009
*
* Status : Accepted
* Runtime: 0.100
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

public static void main(String[] args) {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

Scanner scanner = new Scanner(reader);
StringTokenizer token;
// StringBuilder für die Ausgabe
StringBuilder output = new StringBuilder();
// Operator
char operator;
// String für die erste Zahl
String num1;
// String für die zweite Zahl
String num2;
// BigInteger für die erste Zahl
BigInteger n1;
// BigInteger für die zweite Zahl
BigInteger n2;
// Ganze Zeile
String str;
// Longwert
long num;

while(scanner.hasNextLine()){

// Zeile Auslesen
str = scanner.nextLine();
// StringTokenizer anlegen
token = new StringTokenizer(str);
// Ersten Wert auslesen
n1 = new BigInteger(token.nextToken());
// Operator auslesen
operator = token.nextToken().charAt(0);
// Zweiten Wert auslesen
n2 = new BigInteger(token.nextToken());

// Werte als String Speichern
num1 = n1.toString();
num2 = n2.toString();

// Zeile an die Ausgabe hängen
output.append(str + "\n");

// Prüfen ob ein Minuszeichen vorneansteht
if(num1.charAt(0) == '-')num1 = num1.substring(1);
if(num2.charAt(0) == '-')num2 = num2.substring(1);

// Prüfen ob die erste Zahl zu lang ist
if(num1.length() > 10)
output.append("first number too big\n");
// Hat sie genau zehn Zeichen, prüfen ob sie MAX_VALUE von BigInteger überschreitet
else
if(num1.length() == 10){
num = Long.parseLong(num1);
if(num > Integer.MAX_VALUE)
output.append("first number too big\n");
}
// Prüfen ob die zweite Zahl zu lang ist
if(num2.length() > 10)
output.append("second number too big\n");
// Hat sie genau zehn Zeichen, prüfen ob sie MAX_VALUE von BigInteger überschreitet
else
if(num2.length() == 10){
num = Long.parseLong(num2);
if(num > Integer.MAX_VALUE)
output.append("second number too big\n");
}
// Handelt es sich um eine Addition, prüfen ob der addierte Wert Integer.MAX_Value übersteigt
if(operator == '+'){
if((n1.add(n2)).subtract(BigInteger.valueOf(Integer.MAX_VALUE)).signum()>0 || (n1.add(n2)).add(BigInteger.valueOf(Integer.MAX_VALUE)).signum()<0)
output.append("result too big\n");
}
// Handelt es sich um eine Multiplikation, prüfen ob der addierte Wert Integer.MAX_Value übersteigt
else{
if((n1.signum()>0 && n2.signum()>0) || (n1.signum()<0 && n2.signum()<0)){
if((n1.multiply(n2)).subtract(BigInteger.valueOf(Integer.MAX_VALUE)).signum()>0)
output.append("result too big\n");
}
else
if((n1.multiply(n2)).add(BigInteger.valueOf(Integer.MAX_VALUE)).signum()<0)
output.append("result too big\n");

}

}
System.out.print(output);

}

}