zoukankan      html  css  js  c++  java
  • BUPT复试专题—科学计算器(2009)

    题目描述

    给你一个不带括号的表达式,这个表达式只包含加、减、乘、除,请求出这个表 达式的最后结果,最后结果一定是整数;

    输入

    一个数学表达式,只包括数字,数字保证是非负整数,以及五种运算符 "+","-","*","/","=";数字和运算符之间有一个或者多个空格,运算符的总数 不会超过 100,最后以"="号结尾,表示表达式结束。注意:使用 C 的同学,在 读取字符串的时候请使用 scanf("%s",..);以免不必要的错误。

    输出

    整数;

    样例输入

    1 + 2 + 3 * 6 / 9 =

    样例输出

    5

    来源

    #include <bits/stdc++.h>
    using namespace std;
    char donser[100],temp[100];
    int change(int num,int from)
    {
        int i=from+1,x=0;
        x=temp[from]-'0';
        while(i-from<num)
        {
            x*=10;
            x+=temp[i]-'0';
            i++;
        }
        return x;
    }
    int main()
    {
        memset(donser,0,sizeof(donser));
        memset(temp,0,sizeof(temp));
        while(gets(donser))
        {
            int i=0,j=0;
            while(donser[i]!='')
            {
                if(donser[i]!=' ')
                    temp[j++]=donser[i];
                i++;
            }
            i=0;
            stack<int> num_stack;
            stack<char> fu_stack;
            while(temp[i]!='')
            {
                if(temp[i]>='0'&&temp[i]<='9')
                {
                    int num=1,from=i;
                    while(temp[i+1]>='0'&&temp[i+1]<='9')
                    {
                        num++;
                        i++;
                    }
                    num_stack.push(change(num,from));
                    i++;
                }
                if(!fu_stack.empty())
                {
                    if(fu_stack.top()=='*'||fu_stack.top()=='/')
                    {
                        int x=num_stack.top();
                        num_stack.pop();
                        int y=num_stack.top();
                        num_stack.pop();
                        if(fu_stack.top()=='*')
                            y=x*y;
                        else y=y/x;
                        num_stack.push(y);
                        fu_stack.pop();
                    }
                }
                if(temp[i]=='+'||temp[i]=='-'||temp[i]=='*'||temp[i]=='/')
                {
                    fu_stack.push(temp[i]);
                    i++;
                }
                if(temp[i]=='=')
                {
                    i++;
                    continue;
                }
            }
            stack<int> num_stack_temp;
            stack<char> fu_stack_temp;
            while(!fu_stack.empty())
            {
                fu_stack_temp.push(fu_stack.top());
                fu_stack.pop();
            }
            while(!num_stack.empty())
            {
                num_stack_temp.push(num_stack.top());
                num_stack.pop();
            }
            while(!fu_stack_temp.empty())
            {
                int x=num_stack_temp.top();
                num_stack_temp.pop();
                int y=num_stack_temp.top();
                num_stack_temp.pop();
                if(fu_stack_temp.top()=='+')
                    y=y+x;
                else
                    y=x-y;
                num_stack_temp.push(y);
                fu_stack_temp.pop();
            }
            cout<<num_stack_temp.top()<<endl;
            num_stack_temp.pop();
            memset(donser,0,sizeof(donser));
            memset(temp,0,sizeof(temp));
        }
        return 0;
    }
  • 相关阅读:
    Java多线程系列 JUC锁03 公平锁(一)
    Java多线程系列 JUC锁02 互斥锁ReentrantLock
    JDBC课程3--通过ResultSet执行查询操作
    JDBC课程2--实现Statement(用于执行SQL语句)--使用自定义的JDBCTools的工具类静态方法,包括insert/update/delete三合一
    JDBC_通过DriverManager获得数据库连接
    JDBC课程1-实现Driver接口连接mysql数据库、通用的数据库连接方法(使用文件jdbc.properties)
    [终章]进阶20-流程控制结构--if/case/while结构
    MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子
    MySQL进阶18- 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'- 删除/查看/修改-三个练习
    SQL进阶17-变量的声明/使用(输出)--全局变量/会话变量--用户变量/局部变量
  • 原文地址:https://www.cnblogs.com/dzzy/p/8607616.html
Copyright © 2011-2022 走看看