時間限制:
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.005.53
表示式的計算分為三種,字首、中綴、字尾;
像我平常見的是中綴,如 2+3*5-7;
中綴變字首:加括號:如(2+((3*5)-7)),然後把符號提取到對應的括號前,+(2-(*(35)7));去括號:+ 2 - * 3 5 7;
字尾與字首相反;
字首的計算方法:用乙個棧來存放表示式中的數值,當遇到符號時,從棧中提取兩個數值,然後計算,把新數值壓入棧中;依次重複;
關鍵點:這道題我用到了istringstream物件,
istringstream物件可以繫結一行字串,然後以空格為分隔符把該行分隔開來。
例如:
#include#includeusing namespace std;
int main()
//int length=strlen(str);
for(int i=j-1;i>=0;i--)
else
nu.push(atof(str[i]));
} printf("%.2lf\n",nu.top());
} return 0;
}
字首表示式
編寫乙個程式,以字串方式輸入乙個字首表示式,然後計算它的值。輸入格式為 運算子 物件1 物件2 其中,運算子為 加法 減法 乘法 或 除法 運算物件為不超過10的整數,它們之間用乙個空格隔開。要求 對於加 減 乘 除這四種運算,分別設計相應的函式來實現。輸入格式 輸入只有一行,即乙個字首表示式字串。...
中綴表示式 字首表示式 字尾表示式
中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...
中綴表示式 字尾表示式 字首表示式
正如我們常常潛意識認為我們所說的數字都是十進位制,對於數字的其他進製感覺不正確一樣,其實只是我們不熟悉而已,其他進製其實也不過就是一種對資料的表達方式而已。對於我們的表示式也是一樣。eg 表示式2 3 5 7 我們上面所看到的也就是我們平時常用的書寫表示式的方式就是我們所謂的 中綴表示式 字首表示式...