HDU1237:简单计算器

来源:互联网 发布:win10网络连接红叉断网 编辑:程序博客网 时间:2024/05/17 23:21
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
 

Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
 

Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
 

Sample Input
1 + 24 + 2 * 5 - 7 / 110
 

Sample Output
3.0013.36
 


 

//继续栈

 

#include<stdio.h>#include<string.h>#include<stack>using namespace std;int main(){    int i;    double a,b;    char s[250],c;    while(gets(s),strcmp(s,"0")!=0)    {        stack<char>s1;        stack<double>s2;        for(i=0; s[i]; i++)        {            if(s[i]>='0'&&s[i]<='9')            {                a=0;                while(s[i]>='0'&&s[i]<='9')                {                    a=a*10+s[i]-'0';                    i++;                }                i--;                s2.push(a);            }            else if(s[i]=='-'||s[i]=='+')            {                if(!s1.empty())                {                    c=s1.top();                    s1.pop();                    a=s2.top();                    s2.pop();                    b=s2.top();                    s2.pop();                    if(c=='+')                        a+=b;                    else                        a=b-a;                    s2.push(a);                    s1.push(s[i]);                }                else                    s1.push(s[i]);            }            else if(s[i]=='/' || s[i] == '*')            {                char ch = s[i];                b=0;                i+=2;                while(s[i]>='0'&&s[i]<='9')                {                    b=b*10+s[i]-'0';                    i++;                }                i--;                a=s2.top();                s2.pop();                if(ch == '/')                a=a/b;                else                a = a*b;                s2.push(a);            }        }        while(!s1.empty())        {            c=s1.top();            s1.pop();            a=s2.top();            s2.pop();            b=s2.top();            s2.pop();            if(c=='+')                a+=b;            else                a=b-a;            s2.push(a);        }        printf("%.2f\n",s2.top());    }    return 0;}


 

原创粉丝点击