2 条题解

  • 3
    @ 2023-7-6 9:00:53

    差评,居然没有优先级

    可以采用计算后缀表达式的方法。但样例是中缀,所以我们可以建立两个栈:运算符栈和操作数栈。现将运算符和操作数入栈,等最后再用计算后缀表达式的方法计算。

    可是我们发现,如果用栈,计算顺序将会变成从右往左。而我们应该从左往右,所以我们可以将运算符栈改为队列,将操作数栈改为双端队列。详见代码。

    #include <bits/stdc++.h>
    using namespace std;
    deque<int> sta;
    queue<char> st;
    string s; 
    int main(){
        cin>>s;
        for (int i=0;i<s.size();i++){
            if (isdigit(s[i])){
                sta.push_back(s[i]-'0');
            }else{
                st.push(s[i]);
            }
        }
        while (!st.empty()){
            int a=sta.front();
            sta.pop_front();
            int b=sta.front();
            sta.pop_front();
            if (st.front()=='+'){
                sta.push_front(a+b);
            }else if (st.front()=='-'){
                sta.push_front(a-b);
            }else{
                sta.push_front(a*b);
            }
            st.pop();
        }
        cout<<sta.back();
        return 0;
    }
    
    • 2
      @ 2023-7-8 12:55:17
      #include <iostream>
      #include <string>
      using namespace std;
      int main()
      {
      	string a;
      	int num = 0;
      	getline(cin, a);
      	/*for (int i = 3; i < a.size(); i++)
      	{
      		if (a[i] == '+')
      		{
      			num = a[i-1] + a[i + 1] - 48;
      			a[i + 1] = num;
      		}
      		if (a[i] == '-')
      		{
      			num = a[i-1] - a[i + 1];
      			a[i + 1] = num;
      		}
      		if (a[i] == '*')
      		{
      			num = (a[i-1]-48) * (a[i + 1] - 48);
      			a[i + 1] = num;
      		}
      	}*///这是我最开始的思路,但是是错的,原因就在下面,供大家参考一下
      	if (a[1] == '+')//在这里把a[0],a[2]单拎出来,这样可以得到第一个int值,从而方便后面的加减乘
      		            //如果将算出的数重新放回string里面的话一旦num值为两位数那么在string就要用
      		            //两个位置来存放,达不到我们进行计算的目的
      	{
      		num = a[0] + a[2] - 96;
      	}
      	if (a[1] == '-')
      	{
      		num = a[0] - a[2];
      	}
      	if (a[1] == '*')
      	{
      		num = (a[0] - 48) * (a[2] - 48);
      	}
      	for (int i = 3; i < a.size(); i++)
      	{
      		if (a[i] == '+')
      		{
      			num = num + a[i + 1] - 48;
      		}
      		if (a[i] == '-')
      		{
      			num = num - a[i + 1] + 48;
      		}
      		if (a[i] == '*')
      		{
      			num = num * (a[i + 1] - 48);
      		}
      	}
      	cout << num;
      	return 0;
      }
      
      • 1

      信息

      ID
      122
      时间
      1000ms
      内存
      16MiB
      难度
      1
      标签
      递交数
      53
      已通过
      43
      上传者