時間限制:
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
解題思路
:要解決這個題,需要從字首表示式的最後一位開始往前遍歷,若是資料就進棧(當遇到小數時,需要進一步處理,具體方法看**),當遇到字元時就彈出資料棧棧頂的兩個資料,並與此運算子進行相應的運算並把計算結果作為新的資料進棧;直到遍歷結束時,輸出棧頂元素即可,輸出後並把棧頂元素彈出,以免影響下次的結果。
具體**:
#include #include #include #include using namespace std;
stack dsta;
char s[1500];
int main()
a[j]=s[i]-'0';
j++;i--;
}for(int k=j-1;k>=0;k--)
v=v*10+a[k];
dsta.push(v/pow(10,j-1));
}
else
dsta.push(s[i]-'0');
}else
dsta.push(c);
}} printf("%.2lf\n",dsta.top());
dsta.pop();
} return 0;
}
NYOJ 128 字首式計算
描述 先說明一下什麼是中綴式 如2 3 4 5這種我們最常見的式子就是中綴式。而把中綴式按運算順序加上括號就是 2 3 4 5 然後把運算子寫到括號前面就是 2 3 4 5 把括號去掉就是 2 3 4 5 最後這個式子就是該表示式的字首表示。給你乙個字首表示式,請你計算出該字首式的值。比如 2 3 ...
nyoj128 字首式計算
先說明一下什麼是中綴式 如2 3 4 5這種我們最常見的式子就是中綴式。而把中綴式按運算順序加上括號就是 2 3 4 5 然後把運算子寫到括號前面就是 2 3 4 5 把括號去掉就是 2 3 4 5 最後這個式子就是該表示式的字首表示。給你乙個字首表示式,請你計算出該字首式的值。比如 2 3 4 5...
NYOJ128 字首式計算
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 輸入有多組測試資料,每組測試資料佔一行,任意兩個操作符之間,任意兩個運算元之間,運算元與操作符之間都有乙個空格。輸入的兩個運算元可能是小數,資料保證輸入的數都是正數,並且都小於10,運算元數目不超過500。以eof為輸入結束的標誌。輸...