zoukankan      html  css  js  c++  java
  • 计算器代码

    #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;
    }
  • 相关阅读:
    jquery 知识点
    java基础 知识点
    eclipse使用问题
    java中各种集合的用法和比较
    svn服务器安装
    dbcp连接mysql
    java中分页的实现
    在maven框架下遇到的问题及解决方法
    c++获取系统时间,精确到ms级
    qtcreator.exe已停止工作
  • 原文地址:https://www.cnblogs.com/downrainsun/p/9783453.html
Copyright © 2011-2022 走看看