HDU 1237:간단 한 계산기[창고]

3145 단어 C++창고.HDU
단순 계산기
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6429    Accepted Submission(s): 2044
Problem Description
+,-,*,/만 포함 하 는 비 마이너스 정수 계산 표현 식 을 읽 고 이 표현 식 의 값 을 계산 합 니 다.
 
Input
테스트 입력 은 몇 가지 테스트 사례 를 포함 하고 모든 테스트 사례 는 한 줄 을 차지 하 며 줄 당 200 자 를 초과 하지 않 으 며 정수 와 연산 자 사이 에 빈 칸 으로 구분 합 니 다.불법 표현 식 이 없습니다.한 줄 에 0 만 있 을 때 입력 이 끝나 면 해당 결 과 는 출력 하지 마 십시오.
 
Output
각 테스트 용례 에 대해 1 줄,즉 이 표현 식 의 값 을 소수점 뒤의 2 자리 까지 정확하게 출력 합 니 다.
 
Sample Input
1 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output
3.00 13.36
AC-code:
#include<stdio.h>
#include<stack>
#include<string>
#include<iostream>
using namespace std;
char perc(char a,char c);
double operate(double a,char c,double b);

int main()
{
	double a,b;
	string s;
	char c,theta;
	while(getline(cin,s),s!="0")
	{
		stack<char>fuhao;
		stack<double>zifu;
		int i=0;
		zifu.push(s[i]-48);
		c=s[++i];
		while(c!='\0')
		{
			if(c==' ')
			{
				c=s[++i];
				continue;
			}
			else if(c<='9'&&c>='0')
			{
				if(s[i-1]>='0'&&s[i-1]<='9')//         
				{
					a=zifu.top()*10+c-48;
					zifu.pop();
					zifu.push(a);
				}
				else
					zifu.push(c-48);
				c=s[++i];
			}
			else
			{
				if(!fuhao.empty())
				{
					switch(perc(fuhao.top(),c))
					{
						case '<': fuhao.push(c);c=s[++i];break;
						case '>':
							theta=fuhao.top();
							fuhao.pop();
							a=zifu.top();
							zifu.pop();
							b=zifu.top();
							zifu.pop();
							zifu.push(operate(b,theta,a));
							//c=s[++i];             ~  C     fuhao 
							break;
					}
				}
				else
				{
					fuhao.push(c);
					c=s[++i];
				}
			}
		}
		while(!fuhao.empty())//         
		{
			theta=fuhao.top();
			fuhao.pop();
			a=zifu.top();
			zifu.pop();
			b=zifu.top();
			zifu.pop();
			zifu.push(operate(b,theta,a));
		}
		printf("%.2lf
",zifu.top()); } return 0; } char perc(char a,char c)// { if(a=='+'||a=='-') switch(c) { case '+': case '-': return '>';break; case '*': case '/': return '<';break; } else if(a=='*'||a=='/') return '>'; } double operate(double a,char c,double b)// { switch(c) { case '+': return (a+b);break; case '-': return (a-b);break; case '*': return a*b;break; case '/': return a/b;break; } }

좋은 웹페이지 즐겨찾기