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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

7-21 求前缀表达式的值 (25 分)(思路详解)

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

一:題目

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

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

輸出格式:
輸出前綴表達式的運算結果,保留小數點后1位,或錯誤信息ERROR。

輸入樣例:

    • 2 * 3 - 7 4 / 8 4
      輸出樣例:
      13.0

二:思路

舉例說明:
前綴表達式 逆向求解 中綴表達式
-+1*+2345

思路:

從右往左掃描先碰到+號,取+號后面兩個操作數:2,3 得到:2+3.
繼續往左掃碰到*號,取2+3和 4 得到:(2+3)*4
繼續往左掃碰到+號,取1和(2+3)*4得到:1+(2+3)*4
繼續往左掃碰到-號,取1+(2+3)*4和5得到:1+(2+3)*4-5
在處理字符串的時候 用到了字符串的拼接 還有將字符串轉化成 float類型的

但這個題有點坑

我用的是棧 但在設置棧的時候 千萬記得將棧的類型設置成 float 類型 否則 測試點二和四過不去 。

三:上馬

/* 前綴表達式 逆向求解 中綴表達式 -+1*+2345思路:。從右往左掃描先碰到+號,取+號后面兩個操作數:2,3 得到:2+3. 繼續往左掃碰到*號,取2+3和 4 得到:(2+3)*4 繼續往左掃碰到+號,取1和(2+3)*4得到:1+(2+3)*4 繼續往左掃碰到-號,取1+(2+3)*4和5得到:1+(2+3)*4-5 */ #include<bits/stdc++.h> using namespace std; int main() { vector<char>v;int flag = 0;stack<float>s; string str;getline(cin,str);//可以字符串當中的空格讀進去 for(int i = str.size()-1; i >= 0; i--){char c = str[i];v.push_back(c);}// - + 1 * + 2 3 4 -5 // 5- 4 3 2 + * 1 + -for(int i = 0; i < v.size(); i++){string digital= " ";//實現字符串的拼接 // cout << "wyj"; if(v[i] == '+' || v[i] == '-' || v[i] == '/' || v[i] == '*'){double num1 = s.top();s.pop();double num2 = s.top();s.pop();double num;if( v[i] == '+' )num = num1 + num2;if( v[i] == '-' )num = num1 - num2;if( v[i] == '/' ){ num = num1 / num2;if(num2 == 0){flag = 1;break; }} if( v[i] == '*' )num = num1 * num2; s.push(num);i++;//下一個一定是空格 }else//不是運算符 就是 運算數 { //21-while( i < v.size() && v[i] != ' '){digital = v[i] + digital;//實現字符串的拼接 解決小數點問題 解決多位數問題 i++;}float temp = atof(digital.c_str());s.push(temp);// cout <<temp ;} }float result = s.top();if( flag == 0)printf("%.1lf",result);elsecout << "ERROR" ;}


加油陌生人!

總結

以上是生活随笔為你收集整理的7-21 求前缀表达式的值 (25 分)(思路详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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