• 计算器代码


    #include <iostream>
    #include <cstdio>
    #include <stack>
    #include <cstring>
    
    using namespace std;
    
    int r(char c)
    {
        switch(c)
        {
            case '#': return 0;
            case '(': return 0;
            case '+': return 1;
            case '-': return 1;
            case '*': return 2;
            case '/': return 2;
            case ')': return 3;
            default: return -1;
        }
    }
    int cal(int a, int b, char c)      //运算
    {
        switch(c)
        {
            case '+': return a+b;
            case '-': return a-b;
            case '*': return a*b;
            case '/': return a/b;
            default: return -1;
        }
    }
    
    int main()
    {
        char s[210];
        int i;
        while(cin.getline(s, sizeof(s)))
        {
            if(strcmp(s, "0") == 0) return 0;
            int len = strlen(s);
            s[len++] = ' ';
            s[len++] = '#';
            s[len] = '/0';
            stack<char> f;
            stack<int> dit;
            f.push('#');
            for(i = 0; i < len; i++)
            {
                if(s[i] == ' ') continue;
                if(isdigit(s[i]))
                {
                    int temp;
                    sscanf(s+i, "%d", &temp);
                    dit.push(temp);
                    while(isdigit(s[i+1])) i++;
                }
                else
                {
                    bool ok = 1;
                    while(ok)
                    {
                        if(r(s[i]) > r(f.top()) && s[i] != ')' || s[i] == '(')
                        {
                            f.push(s[i]);
                            ok = 0;
                        }
                        else
                        {
                            if(s[i] == '#' && f.top() == '#') break;
                            if(s[i] == ')'){
                            while(f.top() != '('){
                            int b = dit.top(); dit.pop();
                            int a = dit.top(); dit.pop();
                            char c = f.top(); f.pop();
                            int d = cal(a, b, c);
                            dit.push(d);
                            }
                            f.pop();
                            ok = 0;
                            }
                            else{
                            if(f.top() == '(') {
                                ok = 0;
                            }
                            int b = dit.top(); dit.pop();
                            int a = dit.top(); dit.pop();
                            char c = f.top(); f.pop();
                            int d = cal(a, b, c);
                            dit.push(d);
                            }
                            if(s[i] == '#' && f.top() == '#') break;
                    }
                    }
                }
            }
            int ret = dit.top();
            printf("%d
    ", ret);
            while(!f.empty()) f.pop();
            while(!dit.empty()) dit.pop();
        }
        return 0;
    }
  • 相关阅读:
    Myeclipse下使用Maven搭建spring boot项目
    Dubbo+Zookeeper视频教程
    dubbo项目实战代码展示
    流程开发Activiti 与SpringMVC整合实例
    交换两个变量的值,不使用第三个变量的四种法方
    数据库主从一致性架构优化4种方法
    数据库读写分离(aop方式完整实现)
    在本地模拟搭建zookeeper集群环境实例
    box-sizing布局
    盒子模型
  • 原文地址:https://www.cnblogs.com/downrainsun/p/9783453.html
Copyright © 2020-2023  润新知