栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈--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)弹栈:栈的删除操作,也叫做出栈。
本题就运用了栈的数据结构,如果运算符是加法,则直接把那个数字压入栈里,如果是减法,则把那个数的相反数压入栈里,如果是乘法或除法,则取栈头的数相乘或相除,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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/714638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号