//package practis;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Main {
    private enum CharType {
        number, plus, minus, asta, slash, equal;
    }
    private static final String ERROR_MSG = "数式が不正です。";
    public static void main(String args[]) {
        System.out.println(calc("12+00009="));// 21
        System.out.println(calc("+9-1="));// 8
        System.out.println(calc("-2-4="));// -6
        System.out.println(calc("=12+"));// エラー
    }

    private static String calc(String calc) {
        if(!isIllegalArg(calc)) {
            return ERROR_MSG;
        }

        //文字列が正常な場合、計算結果を文字列にして返す
        return innerCalc1(calc);
    }

    private static boolean isIllegalArg(String arg) {
        Pattern pattern = Pattern.compile("^(\\+|-)?.*(\\+|-|\\*|/).*=$");
        Matcher matcher = pattern.matcher(arg);
        return matcher.find();
    }

    /**
     * 数式を計算して、その結果を文字列で返す。
     * @param arg 例:"4+2="
     * @return 計算結果の文字列表現 例:"6"
     */
    private static String innerCalc1(String arg) {
        double x = 0;
        double y = 0;
        CharType operate = null;//演算子

        //数式を、数字と演算子に分解する
        int max = arg.length();
        boolean x_entered = false;
        boolean xIsMinus = false;
        for(int i = 0; i < max; i++) {
            if(i == 0) {
                //一文字目が+だった場合、それを無視する
                if(arg.charAt(0) == '+') continue;
                //一文字目が-だった場合、xを負の数値にするフラグを立てる
                if(xIsMinus = arg.charAt(0) == '-') continue;
            }

            switch(checkCharType(arg.charAt(i))) {
                case number:
                    //数字xを取り出す
                    if(!x_entered) {
                        x = x * 10;
                        x = x + Integer.valueOf(String.valueOf(arg.charAt(i)));
                    } else {
                    //数字yを取り出す
                        y = y * 10;
                        y = y + Integer.valueOf(String.valueOf(arg.charAt(i)));
                    }
                    break;
                case equal://'='の場合
                    break;
                default://足し算なのか、引き算なのか、掛け算なのか、割り算なのか記憶
                    operate = checkCharType(arg.charAt(i));
                    //次の数字は数値y
                    x_entered = true;
                    break;
            }
        }
        //一文字目が-だった場合、xを負の値にする
        if(xIsMinus) x = x * -1;
        //取り出した数字と演算子を元に計算を行う
        return innerCalc2(x, y, operate);
    }

    private static CharType checkCharType(char c) {
        try {
            Integer.valueOf(String.valueOf(c));
            return CharType.number;
        } catch (NumberFormatException e) {
            switch(c) {
                case '+':
                    return CharType.plus;
                case '-':
                    return CharType.minus;
                case '*':
                    return CharType.asta;
                case '/':
                    return CharType.slash;
                case '=':
                    return CharType.equal;
                default:
                    throw new AssertionError();
            }
        }
    }

    /**
     * xとyを計算し、結果を文字列として返す
     * @param x
     * @param y
     * @param operate 演算子
     * （CharType.plus, CharType.minus, CharType.asta, CharType.slash のいずれか）
     * @return　計算結果
     */
    private static String innerCalc2(double x, double y, CharType operate) {
        double answer = 0;
        switch(operate) {
            case plus:
                answer = x + y;
                break;
            case minus:
                answer = x - y;
                break;
            case asta:
                answer = x * y;
                break;
            case slash:
                answer = x / y;
                break;
            default://引数が不正
                throw new IllegalArgumentException();
        }
        return String.valueOf(answer);
    }
}
