首页 > 代码库 > HDU 2424-Gary's Calculator(表达式计算+大数)
HDU 2424-Gary's Calculator(表达式计算+大数)
Gary‘s Calculator
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 950 Accepted Submission(s): 209
Problem Description
Gary has finally decided to find a calculator to avoid making simple calculational mistakes in his math exam. Unable to find a suitable calculator in the market with enough precision, Gary has designed a high-precision calculator himself. Can you help him to write the necessary program that will make his design possible?
For simplicity, you only need to consider two kinds of calculations in your program: addition and multiplication. It is guaranteed that all input numbers to the calculator are non-negative and without leading zeroes.
For simplicity, you only need to consider two kinds of calculations in your program: addition and multiplication. It is guaranteed that all input numbers to the calculator are non-negative and without leading zeroes.
Input
There are multiple test cases in the input file. Each test case starts with one positive integer N (N < 20), followed by a line containing N strings, describing the expression which Gary‘s calculator should evaluate. Each of the N strings might be a string representing a non-negative integer, a "*", or a "+". No integer in the input will exceed 109.
Input ends with End-of-File.
Input ends with End-of-File.
Output
For each test case, please output one single integer (with no leading zeros), the answer to Gary‘s expression. If Gary‘s expression is invalid, output "Invalid Expression!" instead. Please use the format indicated in the sample output.
Sample Input
3 100 + 600 3 20 * 4 2 + 500 5 20 + 300 * 20
Sample Output
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(表达式计算+大数)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。