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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NYOJ 128 前缀式计算

發布時間:2025/3/16 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 128 前缀式计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前綴式計算

時間限制:1000?ms ?|? 內存限制:65535?KB 難度:3 描述

先說明一下什么是中綴式:

如2+(3+4)*5這種我們最常見的式子就是中綴式。

而把中綴式按運算順序加上括號就是:(2+((3+4)*5))

然后把運算符寫到括號前面就是+(2 *( +(3 4) 5) )

把括號去掉就是:+ 2 * + 3 4 5

最后這個式子就是該表達式的前綴表示。

給你一個前綴表達式,請你計算出該前綴式的值。

比如:

+ 2 * + 3 4 5的值就是 37

輸入
有多組測試數據,每組測試數據占一行,任意兩個操作符之間,任意兩個操作數之間,操作數與操作符之間都有一個空格。輸入的兩個操作數可能是小數,數據保證輸入的數都是正數,并且都小于10,操作數數目不超過500。
以EOF為輸入結束的標志。
輸出
對每組數據,輸出該前綴表達式的值。輸出結果保留兩位小數。
樣例輸入
+ 2 * + 3 4 5 + 5.1 / 3 7
樣例輸出
37.00 5.53
AC碼:
// 調用庫函數,遞歸#include<stdio.h> #include<stdlib.h> char str[20]; double fun() {if(scanf("%s",str)==EOF)return 1<<30;if(str[0]=='+')return fun()+fun();if(str[0]=='-')return fun()-fun();if(str[0]=='*')return fun()*fun();if(str[0]=='/')return fun()/fun();return atof(str);//atof在stdlib.h中的把str字符串轉換成double;//atoi在stdlib.h中的把str字符串轉換成int; } int main() {while(1){double tp=fun();if(tp<1<<30)printf("%.2lf\n",tp);elsebreak;} }
AC碼:
#include<stdio.h> char str[1005]; int i=0; double eval() {double x=0,t;if(str[i]=='\0')return 0;while(str[i]==' ')i++;if(str[i]=='+'){i++;return eval()+eval();}if(str[i]=='-'){i++;return eval()-eval();}if(str[i]=='*'){i++;return eval()*eval();}if(str[i]=='/'){i++;return eval()/eval();}while(str[i]>='0'&&str[i]<='9'){x=x*10+(str[i]-'0');i++;}if(str[i]=='.'){i++;t=0.1;while(str[i]>='0'&&str[i]<='9'){x=x+(str[i]-'0')*t;t=t*t;i++;}}return x; } int main() {while(gets(str)){i=0;printf("%.2f\n",eval());}return 0; }

總結

以上是生活随笔為你收集整理的NYOJ 128 前缀式计算的全部內容,希望文章能夠幫你解決所遇到的問題。

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