题目实现起来比较复杂…虽然题意很简单…
目前看到的一个比较简单的方法就是:
1.首先读入第一个数,读入后面的符号,如果数为0且符号为换行,退出。否则把数丢进栈中
2.读入后面的数,如果之前的符号是乘/除号,那么把栈顶的数拿出来与当前的数进行运算,算完丢回栈里。如果是+/-,那么把当前数的正负值弄一下然后丢进栈里就好了
3.读到换行符的时候,依次把栈里的数拿出来加起来即可
中间实现很多小细节要留意…特别是测试样例“0+0”很坑爹…
#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
int main()
{
double t1, t2, t3;
int i, j, k;
while (cin >> t1) {
stack<double>sta; sta.push(t1);
char t;t = getchar();
if (t1 == 0 && t == '\n')exit(0);
while (1) {
if (t == '\n') {
double ans = 0;
while (sta.size())ans += sta.top(), sta.pop();
printf("%.2f\n", ans); break;
}
t = getchar();
cin >> t2;
if (t == '*') {
t3 = sta.top(); sta.pop(); t3 *= t2; sta.push(t3);
}
else if (t == '/') {
t3 = sta.top(); sta.pop(); t3 /= t2; sta.push(t3);
}
else if (t == '-') {
t3 = -t2; sta.push(t3);
}
else if (t == '+')
sta.push(t2);
t = getchar();
}
}
return 0;
}