HDU 2424-Gary's Calculator(表达式计算+大数)

原创 2014年10月09日 23:09:50

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.
 

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.
 

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

表达式求值。 手动模拟吧。可以用站维护,这里我没用到栈来写。注意不能gets()  输入有换行。 还要用到高精度,套一个模板。 #include #include #include #include...
  • u012127882
  • u012127882
  • 2015年06月21日 15:47
  • 503

【HDU】5238 Calculator 【中国剩余定理+线段树】

传送门:【HDU】5238 Calculator题目分析:模数可以拆成四个小素数:7,13,17,19。 这样我们可以分别对这几个素数跑答案,最后中国剩余定理搞一下就好。中间我们用线段树,保存每个模...
  • u013368721
  • u013368721
  • 2015年05月29日 12:55
  • 1557

hdu - 5238 Calculator(线段树+中国剩余定理)线段树好题

原来还不知道中国剩余定理能干什么用,先上几篇中国剩余定理的介绍 下面内容转自:http://wenku.baidu.com/link?url=g1Hiu6UtSoOR6Y3tiHpn5M3_HPn...
  • u010660276
  • u010660276
  • 2015年06月06日 13:33
  • 819

Beaver's Calculator coderforces 70A1 蓝桥杯

Beaver's Calculator coderforces 70A1 这道题贪心 思路简单 但是方法对于我来说比较巧了 题解看源码 #include #include using n...
  • liyanfeng1996
  • liyanfeng1996
  • 2017年02月02日 21:02
  • 552

算法训练 Beaver's Calculator/codeforces 207A1 排序+贪心

问题描述   从万能词典来的聪明的海狸已经使我们惊讶了一次。他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0"。它非常特别,并且被计划使用在各种各样的科学问题中。...
  • HowardEmily
  • HowardEmily
  • 2017年02月07日 17:51
  • 1075

Beaver's Calculator(蓝桥杯 算法训练)sort排序

  • qq_36950575
  • qq_36950575
  • 2017年12月31日 17:53
  • 47

HDU 3624: Digital Calculator

链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11708 题意:就是表达式求值。。。 题解:一种非常优雅的办法解决这...
  • SDU_Phonism
  • SDU_Phonism
  • 2013年10月23日 20:44
  • 547

Beaver's Calculator 【归并排序+贪心】

问题描述   从万能词典来的聪明的海狸已经使我们惊讶了一次。他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0"。它非常特别,并且被计划使用在各种各样的科学问题中。...
  • u014641529
  • u014641529
  • 2016年05月14日 11:13
  • 1139

Hdu 大数运算

Font Size: ← → Problem Description One of the first users of BIT's new supercomputer was Chip Diller...
  • zp___waj
  • zp___waj
  • 2015年03月31日 22:09
  • 718

蓝桥杯- 算法训练-Beaver's Calculator

算法训练 Beaver's Calculator   时间限制:3.0s   内存限制:256.0MB 问题描述   从万能词典来的聪明的海狸已经使我们惊讶了一次。他开发了一种新的计算器,他...
  • survivorone
  • survivorone
  • 2016年12月27日 13:45
  • 1336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 2424-Gary's Calculator(表达式计算+大数)
举报原因:
原因补充:

(最多只允许输入30个字)