NYOJ 35表達式求值

表達式求值

時間限制:3000 ms | 內存限制:65535 KB
難度:4
描述
ACM隊的mdd想做一個計算器,但是,他要做的不僅僅是一計算一個A+B的計算器,他想實現隨便輸入一個表達式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。
比如輸入:“1+2/4=”,程序就輸出1.50(結果保留兩位小數)
輸入
第一行輸入一個整數n,共有n組測試數據(n<10)。
每組測試數據只有一行,是一個長度不超過1000的字符串,表示這個運算式,每個運算式都是以“=”結束。這個表達式里只包含+-*/與小括號這幾種符號。其中小括號可以嵌套使用。數據保證輸入的操作數中不會出現負數。
數據保證除數不會為0
輸出
每組都輸出該組運算式的運算結果,輸出結果保留兩位小數。
樣例輸入
2
1.000+2/4=
((1+2)*5+1)/4=
樣例輸出
1.50
4.00


/*表達式計算思路:從左到右遍歷中綴表達式中的每個數字和符號,若是數字則直接壓入數據棧中,若是符號(左括號直接入符號棧),則判斷其與棧頂符號的優先級,是右括號或優先級低于棧頂符號,則棧(符號棧即數據棧)中的元素依次出棧并計算,直到遇到左括號或棧頂元素優先級小于該符號壓入符號棧為止,最后符號棧依次出棧計算直至符號為空。 
*/ #include "stdio.h"
#include "ctype.h"
#include "stack"
#define maxn 1000+10using namespace std;char buf[maxn];
stack<char> op;		//符號隊列 
stack<double> n; //得到操作符的優先級 
int getValue(char c){	if('('==c) return 0;		if('+'==c || '-'==c) return 1;if('*'==c || '/'==c) return 2;	
}double calc(double a,double b,char c)
{
//	printf("出棧操作:%f %c %f \n",a,c,b);switch(c){case '+': return (a+b);case '-': return (a-b);case '*': return (a*b);case '/': return (a/b);}
}//操作符出棧,即進行計算一次 
void pull()
{	double a,b;if(n.size()>1 && !op.empty()){b=n.top(); n.pop();a=n.top(); n.pop();n.push(calc(a,b,op.top())); //printf("%d:出棧結果入棧!\n",n.size()); op.pop();//	printf("符號:%d  數字:  %d 出棧完畢!\n",op.size(),n.size());}
}int main()
{		int N,i;double d;char c;scanf("%d",&N);while(N--){		scanf("%s",buf); i=0;while(1){if(isalnum(buf[i])){sscanf(buf+i,"%lf",&d);n.push(d);// printf("%d:數字入棧:%lf\n",n.size(),d);while(isalnum(buf[i]) || '.'==buf[i]) i++;				}c=buf[i++];										if('='==c || '\0'==c) break; 			if('('==c){op.push(c); // printf("(入棧\n");}else if(')'==c){while(!op.empty()){if('('==op.top()) {op.pop(); break;	}pull();}}else{//注意先后順序,不為空才能進行op.top()操作 while( !op.empty()  && getValue(c)<=getValue(op.top()))	 pull();op.push(c); //printf("%d:符號入棧:%c \n",op.size(),c);}								}														while(!op.empty())	pull();		printf("%.2lf\n",n.top()); while(!n.empty())	n.pop();		} 		return 0;
}


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374009.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java EE6 CDI,命名組件和限定符

Java EE6的最大承諾之一就是簡化了依賴注入的使用。 他們做到了&#xff0c;使用CDI 。 CDI代表Java EE的上下文和依賴注入&#xff0c;它提供了一個基礎集&#xff0c;用于在企業應用程序中應用依賴注入。 在CDI之前&#xff0c;EJB 3還引入了依賴注入&#xff0c;但這有點基礎…

c#獲取當前目錄的一些方法

【內容來源地址】&#xff1a;http://www.cnblogs.com/marcozh/archive/2008/10/19/1314667.html Assembly myAssembly Assembly.GetEntryAssembly(); string path myAssembly.Location; DirectoryInfo dr new DirectoryInfo(path); pathd…

linux里的進程簡介

/sbin/init 內核啟動的第一個用戶級進程,引導用戶空間服務 [kthreadd] 內核線程管理[migration/0] 用于進程在不同的CPU間遷移[ksoftirqd/0] 內核調度/管理第0個CPU軟中斷的守護進程[migration/1] 管理多核心[ksoftirqd/1] 內核調度/管…

python畫畫bup_Python中的高效Vector / Point類

實現高效的Vector / Point類的最佳方法是什么(甚至更好&#xff1a;是否有一個),可以在Python 2.7和3.x中使用&#xff1f;我找到了the blender-mathutils,但它們似乎只支持Python 3.x.然后是this Vector class,使用numpy,但它只是一個3D矢量.使用具有靜態屬性(x和y)的像kivy’…

CSDN 編程挑戰——《coder的計算器》

coder的計算器 題目詳情: coder現在已經上初中&#xff0c;也會用計算器實現 ,-,*,/和冪運算^了&#xff0c;但他覺得市場那些計算器太繁瑣了&#xff0c;有很多他不認識的符號&#xff0c;所以他現在很想要能計算帶括號的 ,-,*,/和冪運算^的混合表達式就可以了&#xff0c;你…

OpenShift Express:部署Java EE應用程序(支持AS7)

在過去的幾年中&#xff0c;我越來越聽到有關“云”服務的信息。 最初&#xff0c;我并不是很想嘗試一下。 但是幾個月后&#xff08;一年&#xff1f;&#xff09;&#xff0c;我決定看看這是怎么回事。 我從事Java EE開發已經超過7年了&#xff0c;所以我決定看看將Java EE應…

07 總結ProgressDialog 異步任務

1,ProgressDialog> //使用對象 設置標題 progressDialog.setTitle("標題"); //設置圖標 progressDialog.setIcon(R.drawable.ic_launcher); //設置展示的內容 progressDialog.setMessage(&q…

python函數封裝計算n運算_在Python里面怎么可以運算出999999999**999999999,求思路?...

>>> 999999999 * math.log(999999999, 2) / 8 / 1024 ** 33.480509950621777所以這個數字本身就差不多需要3.5GB內存&#xff0c;考慮到計算過程中需要存儲臨時結果&#xff0c;還需要翻個兩三倍吧而Python中的long可以到多少呢&#xff1a;#define MAX_LONG_DIGITS \…

C++中const關鍵字的使用總結

const是不變的意思&#xff0c;在C程序中&#xff0c;經常用const來限制對一個對象的操作: 1.1 const變量 例如&#xff1a; const int n3; 則這個變量的值不能改變&#xff0c;即不能對變量賦值。 1.2 const參數 出現在函數參數中的const表示在函數體中不能對這個參數做修改…

php封裝redis負載均衡類

$array array( master > array( "redis://127.0.0.1:6379?timeout1", ), slave > array( "redis://127.0.0.1:6479?timeout1", "redis://127.0.0.1:6579?timeout1", ) ); $redis R…

我今天對JavaFX的了解

如果您沒有聽說過&#xff0c;JavaFX 2是Java的新Desktop / web / client框架。 自JavaFX 1以來&#xff0c;它已經進行了相當大的改動&#xff08;坦率地說&#xff0c;效果并不那么令人印象深刻&#xff09;。 自定義腳本語言已經淘汰了&#xff0c;您可以使用標準Java和基于…

怎么解決xp系統不能安裝NET Framework4.0?

.net 4.0安裝不上解決方法&#xff1a; 引用 9 樓 MoreQuestion 的回復: 全部都不行&#xff01;就是用360軟件管家安裝那個就可以了。用了樓主的方法&#xff0c;果然可行啊 1.先安裝wic。 2.用360安裝.net40 本帖最后由 不懂 于 2014-6-6 00:56 編輯Windows Server 2003 如何…

C++內聯(inline)函數

內聯函數 內聯函數是一種特殊類型的函數&#xff0c;內聯函數在定義或聲明時前面加上“inline”關鍵字。比如&#xff1a; inline int max(int a,int b) { return (a>b)?a:b; } 內聯&#xff08;inline&#xff09;是內聯擴展&#xff08;inline expansion&#xff09;的簡…

我的python學習筆記全集_記錄我的Python學習筆記

不想再像以前那樣&#xff0c;什么都從頭開始學習語法、總結語法&#xff0c;這樣反而會過分糾結于語法&#xff0c;耽誤了開發&#xff0c;畢竟語言的主要屬性是工具&#xff0c;次要的屬性是語言本身。所以還是先熟練使用語言去進行開發&#xff0c;等足夠熟悉了&#xff0c;…

HDU 5794:A Simple Chess(Lucas + DP)

題目鏈接&#xff1a;http://acm.split.hdu.edu.cn/showproblem.php?pid5794 題意&#xff1a;讓一個棋子從&#xff08;1,1&#xff09;走到&#xff08;n&#xff0c;m&#xff09;&#xff0c;要求像馬一樣走日字型并只能往右下角走。里面還有r個障礙點不能經過或者到達&am…

php源碼分析之PHPAPI宏的作用

在PHP源碼中&#xff0c;我們經常會看到很多函數前面有個PHPAPI&#xff0c;但這是什么呢&#xff1f; 于是我在php源碼/main/php.h中找到了它的定義 #ifdef PHP_WIN32 # include "tsrm_win32.h" # include "win95nt.h" # ifdef PHP_EXPORTS # …

15分鐘內開始使用Amazon Web Services和全自動資源調配

在等待一個新項目時&#xff0c;我想學習一些有用的東西。 而且由于在許多項目中我們需要評估和測試正在開發的應用程序的性能&#xff0c;而很少有足夠的硬件來生成實際負載&#xff0c;因此我決定學習更多有關按需在云中按需配置虛擬機的知識&#xff0c;即Amazon Web Servic…

解析JVM內存區域組成

在方法&#xff08;代碼塊&#xff09;中定義一個變量時&#xff0c;java就在棧中為這個變量分配JVM內存空間&#xff0c;當超過變量的作用域后&#xff0c;java會自動釋放掉為該變量所分配的JVM內存空間&#xff1b;而在堆中分配的JVM內存由java虛擬機的自動垃圾回收器來管理。…

python打開瀏覽器后帶cookie_Python爬蟲使用瀏覽器的cookies:browsercookie

很多用Python的人可能都寫過網絡爬蟲&#xff0c;自動化獲取網絡數據確實是一件令人愉悅的事情&#xff0c;而Python很好的幫助我們達到這種愉悅。然而&#xff0c;爬蟲經常要碰到各種登錄、驗證的阻撓&#xff0c;讓人灰心喪氣(網站&#xff1a;天天碰到各種各樣的爬蟲抓我們網…

VS插件開發

參考資料: VS插件開發 - 個性化VS IDE編輯器 自己動手編寫一個VS插件&#xff08;一&#xff09; VS Addin插件基本開發入門 VS Addin插件配置、部署 轉載于:https://www.cnblogs.com/wangwangfei/p/5830081.html