程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1237 簡單計算器(stack)

HDU 1237 簡單計算器(stack)

編輯:C++入門知識

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
#include
#include
#include
#include
#include
#include
#include

#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)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;

}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved