import java.io.BufferedReader ;
import java.io.IOException ;
import java.io.InputStreamReader ;
public class Main {
public static void main
( String [ ] args
) { while ( ( s = br.readLine ( ) ) != null ) {
try {
int result = getResult( o) ;
System .
out .
printf ( "%d %c %d = %d\n " , o.
getOpOne ( ) , o.
getOp ( ) , o.
getOpTwo ( ) , result
) ; e.printStackTrace ( ) ;
}
}
e.printStackTrace ( ) ;
}
}
private static int getResult
( Operation o
) throws DivideException
{ switch ( o.getOp ( ) ) {
case '+' :
return o.getOpOne ( ) + o.getOpTwo ( ) ;
case '-' :
return o.getOpOne ( ) + - o.getOpTwo ( ) ;
case '*' :
return multiply( o.getOpOne ( ) , o.getOpTwo ( ) ) ;
case '/' :
return divide( o.getOpOne ( ) , o.getOpTwo ( ) ) ;
case '^' :
return power( o.getOpOne ( ) , o.getOpTwo ( ) ) ;
case '%' :
break ;
default :
System .
err .
printf ( "%c is not a supported operation.\n " , o.
getOp ( ) ) ; return - 1 ;
}
return - 1 ;
}
private static int power( int one, int two) throws DivideException {
if ( two == 0 ) {
return 1 ;
} else if ( two < 0 ) {
throw new DivideException( "Non-Integral Answer" ) ;
}
int result = 1 ;
for ( int i = 0 ; i < two; i++ ) {
result = multiply( result, one) ;
}
return result;
}
private static int divide( int one, int two) throws DivideException {
if ( two == 0 ) {
throw new DivideException( "Cannot divide by 0." ) ;
}
boolean answerNegative = false ;
if ( ( one < 0 && two > 0 ) || ( one > 0 && two < 0 ) ) {
answerNegative = true ;
if ( one < 0 ) {
one = - one;
}
if ( two < 0 ) {
two = - two;
}
} else if ( one < 0 && two < 0 ) {
one = - one;
two = - two;
}
int count = 0 ;
int rem = one;
while ( rem >= two) {
rem = rem + - two;
count++;
}
if ( rem > 0 ) {
throw new DivideException( "Non-Integral Answer" ) ;
}
return answerNegative ? - count : count;
}
private static int multiply( int one, int two) {
boolean answerNegative = false ;
if ( ( one < 0 && two > 0 ) || ( one > 0 && two < 0 ) ) {
answerNegative = true ;
if ( one < 0 ) {
one = - one;
}
if ( two < 0 ) {
two = - two;
}
} else if ( one < 0 && two < 0 ) {
one = - one;
two = - two;
}
int result = 0 ;
for ( int i = 0 ; i < one; i++ ) {
result += two;
}
return answerNegative ? - result : result;
}
private int op_one, op_two;
private char op;
String [ ] parts
= s.
split ( "\\ s" ) ; if ( parts.length != 3 ) {
throw new OperationConstructionException( "Input must contain 3, spaced, items." ) ;
}
op_one
= Integer .
parseInt ( parts
[ 0 ] ) ; op_two
= Integer .
parseInt ( parts
[ 2 ] ) ; if ( parts[ 1 ] .length ( ) != 1 ) {
throw new OperationConstructionException( "Operation must be a single char: +, -, /, *, ^, %" ) ;
}
op = parts[ 1 ] .charAt ( 0 ) ;
}
public int getOpOne( ) {
return op_one;
}
public int getOpTwo( ) {
return op_two;
}
public char getOp( ) {
return op;
}
}
public static class OperationConstructionException
extends Throwable { private static final long serialVersionUID = 1L;
public OperationConstructionException
( String message
) { super ( message) ;
}
}
public static class DivideException
extends Throwable { private static final long serialVersionUID = 1L;
public DivideException
( String message
) { super ( message) ;
}
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CglpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKCWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwoKCXB1YmxpYyBjbGFzcyBNYWluIHsKCQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJCXRyeSAoQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpKSB7CgkJCQlTdHJpbmcgcyA9ICIiOwoJCQkJd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgewoJCQkJCU9wZXJhdGlvbiBvOwoJCQkJCXRyeSB7CgkJCQkJCW8gPSBuZXcgT3BlcmF0aW9uKHMpOwoJCQkJCQlpbnQgcmVzdWx0ID0gZ2V0UmVzdWx0KG8pOwoJCQkJCQlTeXN0ZW0ub3V0LnByaW50ZigiJWQgJWMgJWQgPSAlZFxuIiwgby5nZXRPcE9uZSgpLCBvLmdldE9wKCksIG8uZ2V0T3BUd28oKSwgcmVzdWx0KTsKCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gfCBPcGVyYXRpb25Db25zdHJ1Y3Rpb25FeGNlcHRpb24gfCBEaXZpZGVFeGNlcHRpb24gZSkgewoJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwoJCQkJCX0KCQkJCX0KCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewoJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKCQkJfQoJCX0KCgkJcHJpdmF0ZSBzdGF0aWMgaW50IGdldFJlc3VsdChPcGVyYXRpb24gbykgdGhyb3dzIERpdmlkZUV4Y2VwdGlvbiB7CgkJCXN3aXRjaCAoby5nZXRPcCgpKSB7CgkJCWNhc2UgJysnOgoJCQkJcmV0dXJuIG8uZ2V0T3BPbmUoKSArIG8uZ2V0T3BUd28oKTsKCQkJY2FzZSAnLSc6CgkJCQlyZXR1cm4gby5nZXRPcE9uZSgpICsgLW8uZ2V0T3BUd28oKTsKCQkJY2FzZSAnKic6CgkJCQlyZXR1cm4gbXVsdGlwbHkoby5nZXRPcE9uZSgpLCBvLmdldE9wVHdvKCkpOwoJCQljYXNlICcvJzoKCQkJCXJldHVybiBkaXZpZGUoby5nZXRPcE9uZSgpLCBvLmdldE9wVHdvKCkpOwoJCQljYXNlICdeJzoKCQkJCXJldHVybiBwb3dlcihvLmdldE9wT25lKCksIG8uZ2V0T3BUd28oKSk7CgkJCWNhc2UgJyUnOgoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQlTeXN0ZW0uZXJyLnByaW50ZigiJWMgaXMgbm90IGEgc3VwcG9ydGVkIG9wZXJhdGlvbi5cbiIsIG8uZ2V0T3AoKSk7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQkJcmV0dXJuIC0xOwoJCX0KCQoJCXByaXZhdGUgc3RhdGljIGludCBwb3dlcihpbnQgb25lLCBpbnQgdHdvKSB0aHJvd3MgRGl2aWRlRXhjZXB0aW9uIHsKCQkJaWYgKHR3byA9PSAwKSB7CgkJCQlyZXR1cm4gMTsKCQkJfSBlbHNlIGlmICh0d28gPCAwKSB7CgkJCQl0aHJvdyBuZXcgRGl2aWRlRXhjZXB0aW9uKCJOb24tSW50ZWdyYWwgQW5zd2VyIik7CgkJCX0KCQkJaW50IHJlc3VsdCA9IDE7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgdHdvOyBpKyspIHsKCQkJCXJlc3VsdCA9IG11bHRpcGx5KHJlc3VsdCwgb25lKTsKCQkJfQoJCQlyZXR1cm4gcmVzdWx0OwoJCX0KCQoJCXByaXZhdGUgc3RhdGljIGludCBkaXZpZGUoaW50IG9uZSwgaW50IHR3bykgdGhyb3dzIERpdmlkZUV4Y2VwdGlvbiB7CgkJCWlmICh0d28gPT0gMCkgewoJCQkJdGhyb3cgbmV3IERpdmlkZUV4Y2VwdGlvbigiQ2Fubm90IGRpdmlkZSBieSAwLiIpOwoJCQl9CgkJCWJvb2xlYW4gYW5zd2VyTmVnYXRpdmUgPSBmYWxzZTsKCQkJaWYgKChvbmUgPCAwICYmIHR3byA+IDApIHx8IChvbmUgPiAwICYmIHR3byA8IDApKSB7CgkJCQlhbnN3ZXJOZWdhdGl2ZSA9IHRydWU7CgkJCQlpZiAob25lIDwgMCkgewoJCQkJCW9uZSA9IC1vbmU7CgkJCQl9CgkJCQlpZiAodHdvIDwgMCkgewoJCQkJCXR3byA9IC10d287CgkJCQl9CgkJCX0gZWxzZSBpZiAob25lIDwgMCAmJiB0d28gPCAwKSB7CgkJCQlvbmUgPSAtb25lOwoJCQkJdHdvID0gLXR3bzsKCQkJfQoJCQoJCQlpbnQgY291bnQgPSAwOwoJCQlpbnQgcmVtID0gb25lOwoJCQl3aGlsZSAocmVtID49IHR3bykgewoJCQkJcmVtID0gcmVtICsgLXR3bzsKCQkJCWNvdW50Kys7CgkJCX0KCQkJaWYgKHJlbSA+IDApIHsKCQkJCXRocm93IG5ldyBEaXZpZGVFeGNlcHRpb24oIk5vbi1JbnRlZ3JhbCBBbnN3ZXIiKTsKCQkJfQoJCQlyZXR1cm4gYW5zd2VyTmVnYXRpdmUgPyAtY291bnQgOiBjb3VudDsKCQl9CgoJCXByaXZhdGUgc3RhdGljIGludCBtdWx0aXBseShpbnQgb25lLCBpbnQgdHdvKSB7CgkJCWJvb2xlYW4gYW5zd2VyTmVnYXRpdmUgPSBmYWxzZTsKCQkJaWYgKChvbmUgPCAwICYmIHR3byA+IDApIHx8IChvbmUgPiAwICYmIHR3byA8IDApKSB7CgkJCQlhbnN3ZXJOZWdhdGl2ZSA9IHRydWU7CgkJCQlpZiAob25lIDwgMCkgewoJCQkJCW9uZSA9IC1vbmU7CgkJCQl9CgkJCQlpZiAodHdvIDwgMCkgewoJCQkJCXR3byA9IC10d287CgkJCQl9CgkJCX0gZWxzZSBpZiAob25lIDwgMCAmJiB0d28gPCAwKSB7CgkJCQlvbmUgPSAtb25lOwoJCQkJdHdvID0gLXR3bzsKCQkJfQoJCQlpbnQgcmVzdWx0ID0gMDsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbmU7IGkrKykgewoJCQkJcmVzdWx0ICs9IHR3bzsKCQkJfQoJCQlyZXR1cm4gYW5zd2VyTmVnYXRpdmUgPyAtcmVzdWx0IDogcmVzdWx0OwoJCX0KCgkJcHVibGljIHN0YXRpYyBjbGFzcyBPcGVyYXRpb24gewoJCQlwcml2YXRlIGludCBvcF9vbmUsIG9wX3R3bzsKCQkJcHJpdmF0ZSBjaGFyIG9wOwoKCQkJcHVibGljIE9wZXJhdGlvbihTdHJpbmcgcykgdGhyb3dzIE9wZXJhdGlvbkNvbnN0cnVjdGlvbkV4Y2VwdGlvbiwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIHsKCQkJCVN0cmluZ1tdIHBhcnRzID0gcy5zcGxpdCgiXFxzIik7CgkJCQlpZiAocGFydHMubGVuZ3RoICE9IDMpIHsKCQkJCQl0aHJvdyBuZXcgT3BlcmF0aW9uQ29uc3RydWN0aW9uRXhjZXB0aW9uKCJJbnB1dCBtdXN0IGNvbnRhaW4gMywgc3BhY2VkLCBpdGVtcy4iKTsKCQkJCX0KCQkJCW9wX29uZSA9IEludGVnZXIucGFyc2VJbnQocGFydHNbMF0pOwoJCQkJb3BfdHdvID0gSW50ZWdlci5wYXJzZUludChwYXJ0c1syXSk7CgkJCQlpZiAocGFydHNbMV0ubGVuZ3RoKCkgIT0gMSkgewoJCQkJCXRocm93IG5ldyBPcGVyYXRpb25Db25zdHJ1Y3Rpb25FeGNlcHRpb24oIk9wZXJhdGlvbiBtdXN0IGJlIGEgc2luZ2xlIGNoYXI6ICssIC0sIC8sICosIF4sICUiKTsKCQkJCX0KCQkJCW9wID0gcGFydHNbMV0uY2hhckF0KDApOwoJCQl9CgoJCQlwdWJsaWMgaW50IGdldE9wT25lKCkgewoJCQkJcmV0dXJuIG9wX29uZTsKCQkJfQoKCQkJcHVibGljIGludCBnZXRPcFR3bygpIHsKCQkJCXJldHVybiBvcF90d287CgkJCX0KCgkJCXB1YmxpYyBjaGFyIGdldE9wKCkgewoJCQkJcmV0dXJuIG9wOwoJCQl9CgkJfQoKCQlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZXJhdGlvbkNvbnN0cnVjdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFRocm93YWJsZSB7CgkJCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwoKCQkJcHVibGljIE9wZXJhdGlvbkNvbnN0cnVjdGlvbkV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgewoJCQkJc3VwZXIobWVzc2FnZSk7CgkJCX0KCQl9CgkKCQlwdWJsaWMgc3RhdGljIGNsYXNzIERpdmlkZUV4Y2VwdGlvbiBleHRlbmRzIFRocm93YWJsZSB7CgkJCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwoJCQoJCQlwdWJsaWMgRGl2aWRlRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7CgkJCQlzdXBlcihtZXNzYWdlKTsKCQkJfQoJCX0KCX0=
stdin
MTIgKyAyNQotMzAgKyAxMDAKMTAwIC0gMzAKMTAwIC0gLTMwCi0yNSAtIDI5Ci00MSAtIC0xMAo5ICogMwo5ICogLTQKLTQgKiA4Ci0xMiAqIC05CjEwMCAvIDIKNzUgLyAtMwotNzUgLyAzCjcgLyAzCjAgLyAwCjUgXiAzCi01IF4gMwotOCBeIDMKLTEgXiAxCjEgXiAxCjAgXiA1CjUgXiAwCjEwIF4gLTM=
12 + 25
-30 + 100
100 - 30
100 - -30
-25 - 29
-41 - -10
9 * 3
9 * -4
-4 * 8
-12 * -9
100 / 2
75 / -3
-75 / 3
7 / 3
0 / 0
5 ^ 3
-5 ^ 3
-8 ^ 3
-1 ^ 1
1 ^ 1
0 ^ 5
5 ^ 0
10 ^ -3