HDU

来源:互联网 发布:莫知的意思是什么 编辑:程序博客网 时间:2024/06/12 00:11
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。 
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。 
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。 
Sample Input
1 + 24 + 2 * 5 - 7 / 110
Sample Output
3.0013.36
#include <cstdio>#include <iostream>#include <string>#include <sstream>#include <cstring>#include <stack>#include <queue>#include <algorithm>#include <cmath>#include <map>using namespace std;int main(){    string s;    int flag;    while(getline(cin,s))    {        if(s.size()==1)break;        flag = 1;        stringstream stream(s);        double num;        char op = ' ';        stack<char> sop;        stack<double> snum;        while(1)        {            if(flag)            {               stream >> num;                if(op =='*'||op == '/')                {                    double num1 = snum.top();                    snum.pop();                    if(op=='*')num1 = num * num1;                    elsenum1 = num1 / num;                    snum.push(num1);                }                else snum.push(num);                flag=0;            }            else            {                if(stream>>op);                else break;                if(op=='+'||op=='-')                {                    double num1,num2;                    char c;                    if(!sop.empty())                    {                        c=sop.top(),sop.pop();                        num2=snum.top(),snum.pop();                        num1=snum.top(),snum.pop();                        if(c=='+')num1+=num2;                        else num1-=num2;                        snum.push(num1);                    }                    sop.push(op);                }                flag=1;            }        }        while(!sop.empty())        {            op=sop.top(),sop.pop();            double num1,num2;            num2=snum.top(),snum.pop();            num1=snum.top(),snum.pop();            if(op=='+')num1+=num2;            else num1-=num2;            snum.push(num1);        }        printf("%.2lf\n",snum.top());    }    return 0;}

#include<iostream>#include<stack>#include<cstring>#include<cstdio>#include<sstream>#include<iomanip>#include<string>using namespace std;int main() {char op;double num,temp;while(scanf("%lf",&num)){stack<double> sum;op = getchar();if(num == 0 && op == '\n')break;sum.push(num);while(1){scanf("%c %lf", &op, &num);switch (op){case '+':sum.push(num);break;case '-':sum.push(-num);break;case '*':temp = sum.top();sum.pop();sum.push(temp*num);break;case '/':temp = sum.top();sum.pop();sum.push(temp/num);break;}if(getchar() == '\n')break;}double ans = 0;while(!sum.empty()){ans += sum.top();sum.pop();}printf("%.2lf\n",ans);}}

原创粉丝点击