栈--hdu 1237‘简单计算器‘

栈--hdu 1237‘简单计算器‘,第1张

栈--hdu 1237‘简单计算器‘

Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

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

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

Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output

3.00

13.36

1、栈(Stack)是一种线性存储结构,它具有如下特点:

(1)栈中的数据元素遵守“先进后出"(First In Last Out)的原则,简称FILO结构。(后进先出的叫法,也是可以的)

(2)限定只能在栈顶进行插入和删除 *** 作。

2、栈的相关概念:

(1)栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。

(2)压栈:栈的插入 *** 作,叫做进栈,也称压栈、入栈。

(3)d栈:栈的删除 *** 作,也叫做出栈。
本题就运用了栈的数据结构,如果运算符是加法,则直接把那个数字压入栈里,如果是减法,则把那个数的相反数压入栈里,如果是乘法或除法,则取栈头的数相乘或相除,pop出后把结果push进去,最后就把栈中的数字相加就是结果。

#include
using namespace std;
int main()
{
    double a;
    char ch;
    while(~scanf("%lf%c",&a,&ch))
    {
        if(a==0&&ch=='n') 
            break;
        stacks;
        s.push(a);
        double ans=0;
        while(scanf("%c %lf",&ch,&a))
        {
            if(ch=='+')
            {
                s.push(a);
            }
            else if(ch=='-')
            {
                s.push(-a);
            }
            else if(ch=='*')
            {
                double d=s.top()*a;
                s.pop();
                s.push(d);
            }
            else
            {
                double d=s.top()*1.0/a;
                s.pop();
                s.push(d);
                
            }
            char k=getchar();
            if(k=='n')
            {
                break;
            }
        }
        while(!s.empty())
        {
            ans=ans+s.top();
            s.pop();
        }
        printf("%.2lfn",ans);
        
     } 
     return 0;
 } 

 数媒202 qxy

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存