社区讨论

Subtask 0 全对,Subtask 1 WA,也不知道哪里错了

P1175表达式的转换参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m0jjjrjr
此快照首次捕获于
2024/09/01 20:21
2 年前
此快照最后确认于
2025/11/04 21:52
4 个月前
查看原帖
CPP
#include <iostream>
#include <stack>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
#define int long long
int check(char c)//判断优先级
{
	switch(c)
	{
		case '+':return 1;
		case '-':return 1;
		case '*':return 2;
		case '/':return 2;
		case '^':return 3;
		default:return -1;//程序不会执行这句,保险起见要加上
	}
}
stack<char> a;
vector<char> b;
vector<int> t;
main()
{
    string s;
    getline(cin,s);
    int tmp = s.size()-1;  
//一.转后缀  
    for(auto c:s)
    {        
        if(c >= '0' && c <= '9')
            b.push_back(c);
        if(check(c) >= 1 && check(c) <= 3)//c == '+' || c == '-' || c == '*' || c == '/' || c == '^'
        {
            if(!a.empty())
            {
                while(!a.empty() && check(c) <= check(a.top()))
                {    
                    if(check(c) == check(a.top()) && check(c) == 3)break;//在c与栈顶都是^号时也能进栈            
                    b.push_back(a.top());
                    a.pop();
                }
            }
            a.push(c);    
        }
        if(c == '(')
            a.push(c);
        if(c == ')')
        {
            while(a.top() != '(')
            { 
                b.push_back(a.top());
                a.pop();
            }
            a.pop();
        }        
        if(c == s[tmp])
        {
            while(!a.empty())
            {
                b.push_back(a.top());
                a.pop();     
            }
        }
    }
//二.输出后缀
    for(int i = 0;i < b.size();i++)
    {
        cout << b[i] << ' ';
    }
    cout << endl;
//三.输出过程
    int x,y,z;
    int ans;
    for(int i = 0;i < b.size();i++)
    {
        if(b[i] >= '0' && b[i] <= '9')
        {
            ans = b[i]-'0';
            t.push_back(ans);
        }
        if(b[i] == '+')
        {
            x = t.back();
            t.pop_back();
            y = t.back();
            t.pop_back();
            z = x+y;
            t.push_back(z);
            for(int j = 0;j < t.size() ; j++)
            {
                cout << t[j] << ' ';
            }
            for(int j = i+1;j < b.size() ; j++)
            {
                cout << b[j] << ' ';
            }
            cout << endl;
        }
        if(b[i] == '-')
        {
            x = t.back();
            t.pop_back();
            y = t.back();
            t.pop_back();
            z = y-x;
            t.push_back(z);
            for(int j = 0;j < t.size() ; j++)
            {
                cout << t[j] << ' ';
            }
            for(int j = i+1;j < b.size() ; j++)
            {
                cout << b[j] << ' ';
            }
            cout << endl;
        }
        if(b[i] == '*')
        {
            x = t.back();
            t.pop_back();
            y = t.back();
            t.pop_back();
            z = x*y;
            t.push_back(z);
            for(int j = 0;j < t.size() ; j++)
            {
                cout << t[j] << ' ';
            }
            for(int j = i+1;j < b.size() ; j++)
            {
                cout << b[j] << ' ';
            }
            cout << endl;
        }
        if(b[i] == '/')
        {
            x = t.back();
            t.pop_back();
            y = t.back();
            t.pop_back();
            z = y/x;
            t.push_back(z);
            for(int j = 0;j < t.size() ; j++)
            {
                cout << t[j] << ' ';
            }
            for(int j = i+1;j < b.size() ; j++)
            {
                cout << b[j] << ' ';
            }
            cout << endl;
        }
        if(b[i] == '^')
        {
            x = t.back();
            t.pop_back();
            y = t.back();
            t.pop_back();
            z = pow(y,x);
            t.push_back(z);
            for(int j = 0;j < t.size() ; j++)
            {
                cout << t[j] << ' ';
            }
            for(int j = i+1;j < b.size() ; j++)
            {
                cout << b[j] << ' ';
            }
            cout << endl;
        }
    }
}

回复

4 条回复,欢迎继续交流。

正在加载回复...