Problem:
問題 2

　加減乗除の計算をする電卓プログラムを作りなさい．

　入力データの各行には数と記号 +, -, *, /, = のどれか1つが交互に書いてある．
１行目は数である．
演算 +, -, *, / の優先順位（乗除算 *, / を加減算 +, - よりも先に計算すること）は考えず，入力の順序で計算し，= の行になったら，計算結果を出力する．
入力データの数値は108以下の正の整数とする．
計算中および計算結果は，0または負の数になることもあるが
-108〜108 の範囲は超えない．
割り算は切り捨てとする．
したがって，100/3*3= は 99 になる．

　出力ファイルにおいては，
出力の最後の行にも改行コードを入れること．

入出力例

入力例１

1
+
1
=

出力例１

2

入力例２

10
-
21
*
5
=

出力例２

-55

入力例３

100
/
3
*
3
=

出力例３

99

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;

import static java.lang.System.*;
import static java.lang.Math.*;

class Main {
	public static Scanner sc = new Scanner(in);
	public static Random rand=new Random();

	//E→ F | E*F | E/F
	//F→ D | F+D | F-D

	enum T{
		d,
		p
	};
	public T type;

	public String str;

	public void next(){
		str=sc.next();
		if(str.matches("[0-9]+")){
			type=T.d;
		}else{
			type=T.p;
		}
	}

	public int E(){
		int l=F();
		char exp=str.toCharArray()[0];
		while(exp=='*' || exp=='/'){
			next();
			int r=F();
			if(exp=='*')
				l*=r;
			else
				l/=r;
			exp=str.toCharArray()[0];
		}
		return l;
	}
	public int F(){
		int l=Integer.parseInt(str);
		next();
		char exp=str.toCharArray()[0];
		while(exp=='+' || exp=='-'){
			next();
			int r=Integer.parseInt(str);
			if(exp=='+')l+=r;
			else l-=r;

			next();
			exp=str.toCharArray()[0];
		}
		return l;
	}

	public void run() {
		next();
		ln(E());
	}
	public static void main(String[] args) {
		new Main().run();
	}

	public int[] nextIntArray(int n){
		int[] res=new int[n];
		for(int i=0;i<n;i++){
			res[i]=sc.nextInt();
		}
		return res;
	}
	public static void pr(Object o) {
		out.print(o);
	}
	public static void ln(Object o) {
		out.println(o);
	}
	public static void ln() {
		out.println();
	}
}