简单计算器(hdu 1237)

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

思路:

栈,后缀表达式。

中缀表达式->后缀表达式:栈中的操作符从栈顶到栈底 严格递减(即保证push到符号栈的符号必然比栈顶符号优先级高,否则pop)

错误提示:

改到要崩溃才想到float精度不够,要用double

#include "iostream"
#include "stdio.h"
#include "math.h"
#include "vector"
#include "stack"
#include "queue"
#include "memory.h"
#include "algorithm"
#include "string"
using namespace std;

char e[250],post[250];
stackOp;

bool Isnum(char c)
{
	if(c>='0'&&c<='9')
		return true;
	return false;
}

int OPMode(char c)
{
	if(c=='+')		return 1;
	if(c=='-')		return 2;
	if(c=='*')		return 3;
	if(c=='/')		return 4;
	return -1;
}

void SplitExp(char* s)
{
	int i,j=0;
	memset(post,'\0',sizeof(post));
	for(i=0;i2)
				{
					post[j++]=Op.top();
					Op.pop();
				}
			}
			Op.push(s[i])	;
		}
	}
	while(!Op.empty())
	{
		post[j++]=Op.top();
		Op.pop();
	}
}

stackNum;
double Cal()
{
	while(!Num.empty())
		Num.pop();
	int i=0,j;
	int len=strlen(post);
	while (i++


你可能感兴趣的:(ACM,Data,Structure)