3 100 + 600 3 20 * 4 2 + 500 5 20 + 300 * 20
Case 1: 700 Case 2: 80 Case 3: Invalid Expression! Case 4: 6020给出一个只含+和*的表达式,求其值。由于数据太大,使用BigInteger 。 可以采用栈来计算表达式,先算*,后算+;import java.io.*; import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n, cas = 1; while (in.hasNext()) { n = in.nextInt(); String[] s = new String[n]; for (int i = 0; i < n; i++) s[i] = in.next(); int flag = 1; if (n % 2 == 0) flag = 0; for (int i = 0; i < n; i++) { if ((i % 2 == 1 && s[i].charAt(0) != '+' && s[i].charAt(0) != '*') || (i % 2 == 0 && (s[i].charAt(0) == '+' || s[i] .charAt(0) == '*'))) flag = 0; } System.out.print("Case " + cas + ": "); cas++; if (flag == 0 || n == 0) { System.out.println("Invalid Expression!"); continue; } Stack stack = new Stack(); for (int i = 0; i < n; i++) { int tag = 0; if (s[i].charAt(0) != '+' && s[i].charAt(0) != '*') { if (stack.size() != 0) { String t = stack.peek().toString(); if (t.charAt(0) == '*') { stack.pop(); if (stack.size() != 0) { String tt = stack.pop().toString(); BigInteger a = new BigInteger(s[i].toString()); BigInteger b = new BigInteger(tt.toString()); stack.push(a.multiply(b).toString()); tag = 1; } } } } if (tag == 0) stack.push(s[i]); } BigInteger res = BigInteger.ZERO; while (stack.size() != 0) { String x = stack.pop().toString(); if (x.charAt(0) != '+') { res = res.add(new BigInteger(x)); } } System.out.println(res); } } }
HDU 2424-Gary's Calculator(表达式计算+大数)
原文:http://blog.csdn.net/qq_16255321/article/details/39941745