zoukankan      html  css  js  c++  java
  • 题目1019:简单计算器(栈的使用)

    题目链接:http://ac.jobdu.com/problem.php?pid=1019

    题目具体分析见:https://github.com/zpfbuaa/JobduInCPlusPlus

     

    参考代码:

    //
    //  1019 简单计算器.cpp
    //  oj
    //
    //  Created by PengFei_Zheng on 04/04/2017.
    //  Copyright © 2017 PengFei_Zheng. All rights reserved.
    //
     
    #include <stdio.h>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <string.h>
    #include <stack>
     
    #define run ;
    //#define debug ;
     
    using namespace std;
    int num1;
    double temp;
     
    stack<double> myStack;
     
    int main(){
     
    #ifdef debug
        while(scanf("%d ",&num1)&&num1!=0){
            cout<<num1<<" ";
            char a,b;
            int num;
            while(scanf("%c %d%c",&a,&num,&b)!=EOF){
                if(b!=' '){
                    cout<<a<<" "<<num<<endl;
                    break;
                }
                else{
                    cout<<a<<" "<<num<<b;
                }
            }
        }
    #endif
         
    #ifdef run
        char space0;
        while(scanf("%d%c",&num1,&space0)&&num1!=0&&space0==' '){//ignore the space and using space0!=' ' and num1==0 the jump out of loop
            while(!myStack.empty()){
                myStack.pop();
            }
            myStack.push(num1);
    //        cout<<"myStack push: "<<num1<<endl;
            char op,space1,space2;
            int num2;
             
            while(scanf("%c%c%d%c",&op,&space1,&num2,&space2)!=EOF){//ignore the space and using space2 to jump out of this calculation
                if(op=='+'){
    //                cout<<"myStack push: "<<num2<<endl;
                    myStack.push(num2);
                }
                else if(op=='-'){
    //                cout<<"myStack push: "<<0-num2<<endl;
                    myStack.push(0-num2);
                }
                else if(op=='*'){
                    temp = myStack.top();
                    myStack.pop();
    //                cout<<"myStack push: "<<temp*num2<<endl;
                    myStack.push(temp*num2);
                }
                else if(op=='/'){
                    temp = myStack.top();
                    myStack.pop();
    //                cout<<"myStack push: "<<temp/num2<<endl;
                    myStack.push(temp/num2);
                }
                if(space2!=' ')//jump out of loop
                    break;
            }
            while(!myStack.empty()){
                if(myStack.size()==1){
                    printf("%.2lf
    ",myStack.top());
                    break;
                }
                double x = myStack.top();
                myStack.pop();
                double y = myStack.top();
                myStack.pop();
                myStack.push(x+y);
            }
        }
    #endif
         
    }
    /**************************************************************
        Problem: 1019
        User: zpfbuaa
        Language: C++
        Result: Accepted
        Time:0 ms
        Memory:1524 kb
    ****************************************************************/
  • 相关阅读:
    IIS应用程序池标识(程序池账户)ApplicationPoolIdentify
    笔记二 sql 基础知识
    笔记三 索引讲解
    SqlParameter使用参数错误,提示请求超时或则查询速度过慢
    SVN 常见操作
    Excel 基本操作
    sql server row_number分页排序
    本地部署IIS
    sql中去掉字段的所有空格
    sql取逗号前后数据与批量修改某一字段某一值
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6680719.html
Copyright © 2011-2022 走看看