日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3-07. 求前缀表达式的值(25) (ZJU_PAT数学)

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3-07. 求前缀表达式的值(25) (ZJU_PAT数学) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://pat.zju.edu.cn/contests/ds/3-07


算術表達式有前綴表示法、中綴表示法和后綴表示法等形式。前綴表達式指二元運算符位于兩個運算數之前,比如2+3*(7-4)+8/4的前綴表達式是:+ + 2 * 3 - 7 4 / 8 4。請設計程序計算前綴表達式的結果值。

輸入格式說明:

輸入在一行內給出不超過30個字符的前綴表達式,僅僅包括+、-、*、\以及運算數,不同對象(運算數、運算符號)之間以空格分隔。

輸出格式說明:

輸出前綴表達式的運算結果,精確到小數點后1位,或錯誤信息“ERROR”。

例子輸入與輸出:

序號 輸入 輸出
1 + + 2 * 3 - 7 4 / 8 4 13.0
2 / -25 + * - 2 3 4 / 8 4 12.5
3 / 5 + * - 2 3 4 / 8 2 ERROR
4 +10.23 10.2


代碼例如以下:

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <stack> using namespace std; char s[47]; stack<double>ss;int is_op(char c) {if(c=='+' || c=='-' || c=='*' || c=='/')return 1;return 0; } int main() {while(gets(s)){while(!ss.empty())//清空{ss.pop();}int len = strlen(s);int cc = 1;double tsum = 0;int flag = 0;//標記是否出現零作為除數的情況for(int i = len-1; i >= 0; i--){if(s[i]>='0' && s[i]<='9'){tsum+=(s[i]-'0')*cc;cc*=10;}else if(s[i] == '.')//小數{tsum = tsum/(cc*1.0);cc = 1;}else if((s[i]=='+'||s[i]=='-') && tsum!=0){if(s[i] == '+'){ss.push(tsum);i--;//跳過下一個空格continue;}else{tsum = -tsum;ss.push(tsum);i--;//跳過下一個空格continue;}}else if(s[i] == ' ')//當中一個運算數已經統計完{ss.push(tsum);tsum = 0;cc = 1;continue;}else if(is_op(s[i]))//假設是運算符{double a = ss.top();ss.pop();double b = ss.top();ss.pop();double tt = 0;if(s[i] == '+')tt = a+b;else if(s[i] == '-')tt = a-b;else if(s[i] == '*')tt = a*b;else if(s[i] == '/'){if(b == 0){flag = 1;break;}tt = a/b;}ss.push(tt);i--;//跳過下一個空格}}/*int k = 0;//記錄最后棧內還剩有的數字有多少個,有多個則ERRORint lenn = ss.size();double tt;for(int i = 0; i < lenn; i++){tt = ss.top();ss.pop();if(!is_op(tt)){k++;}}if(flag != 1)printf("%.1lf\n",tt);*/if(flag != 1)printf("%.1lf\n",ss.top());elseprintf("ERROR\n");}return 0; }

轉載于:https://www.cnblogs.com/bhlsheji/p/4198274.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的3-07. 求前缀表达式的值(25) (ZJU_PAT数学)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。