HDU 1237 简单计算器(stack)

Problem Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output

3.00
13.36

Source

浙大计算机研究生复试上机考试-2006年

Recommend

JGShining   |   We have carefully selected several similar problems for you:  1230 1235 1234 1236 1229

这个题困扰我几天了,看了别人的博客,这个方法太厉害了,居然不保存 字符数组

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>

#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)

#define eps 1e-8
using namespace std;
#define N 10005

int main()
{
	int i;
	char c,cc;
	double a,b;

	while(~scanf("%lf%c",&a,&c))
	{
       if(fabs(a-0)<eps&&c=='\n')
		break;

		if(c=='\n')
		{
			printf("%.2lf\n",a);
			continue;
		}

	    stack<double>q;
	    q.push(a);

          scanf("%c%lf",&c,&a);
          if(c=='+')
		        q.push(a);
		   else
		      if(c=='-')
		        q.push(a*(-1));
		   else
		  {
			 double cur=q.top();
			 q.pop();
			 if(c=='*')
			  q.push(cur*a);
			 else
			  q.push(cur/a);
		  }

        while(scanf("%c",&c))
		{
			if(c=='\n') break;
			scanf("%c%lf",&c,&a) ;
			if(c=='+')
		        q.push(a);
		   else
		      if(c=='-')
		        q.push(a*(-1));
		   else
		  {
			 double cur=q.top();
			 q.pop();
			 if(c=='*')
			  q.push(cur*a);
			 else
			  q.push(cur/a);
		  }
		}

		double ans=0;
		while(!q.empty())
		{
			ans+=q.top();
			q.pop();
		}
       printf("%.2lf\n",ans);
	}
   return 0;

}

时间: 2024-10-17 17:11:21

HDU 1237 简单计算器(stack)的相关文章

HDU 1237 简单计算器

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12832    Accepted Submission(s): 4222 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整

HDU 1237 简单计算器(后缀式+栈)

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16351    Accepted Submission(s): 5604 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,

Hdu 1237简单计算器

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21184    Accepted Submission(s): 7599 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整

hdu 1237 简单计算器 逆波兰~~

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13852    Accepted Submission(s): 4613 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,

hdu 1237 简单计算器(栈处理)

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26553    Accepted Submission(s): 9626 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整

HDU 1237 简单计算器(栈)

题目链接 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔.没有非法表达式.当一行中只有0时输入结束,相应的结果不要输出. Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位. Sample Input 1 + 2 4 + 2 * 5 - 7 / 11 0 Sample Output 3.00

HDU 1237 简单计算器 (栈 )

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<stack> using namespace std; char str[300]; double ans; double chcd(char x) { return (x-'0')*1.0; } double ch(int l,int r) { //printf("%d

hdoj 1237 简单计算器 【字符串处理】

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12565    Accepted Submission(s): 4132 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,

HDOJ 1237 简单计算器(堆栈)

简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14833    Accepted Submission(s): 5050 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,