80分求助,第3 ,10个点wa了(拿不到数据呜呜呜...)
查看原帖
80分求助,第3 ,10个点wa了(拿不到数据呜呜呜...)
312993
lxqfeng楼主2020/7/27 15:13
#include<iostream>
#include<string>
#include<stack>
#include<cmath>

using namespace std;

stack<char> a1;

int gg(char ch)
{
    if (ch == '+')
       return 1;
    else if (ch == '-')
        return 1;
    else if (ch == '*')
        return 2;
    else if (ch == '/')
        return 2;
    else if (ch == '^')
        return 3;
    else if (ch == '(')
        return 0;
}
int cal(int a, int b, char ch)
{
    if (ch == '+')
    {
        return a + b;
    }
    else if (ch == '-')
    {
        return a - b;
    }
    else if (ch == '*')
    {
        return a * b;
    }
    else if (ch == '/')
    {
        return a / b;
    }
    else if (ch == '^')
    {
        return pow(a, b);
    }
}
int main() {
    int i, j;
    string s, ans;
    cin>>s;
    for (i = 0; i < s.length(); ++i)
    {
        if (s[i] >= '0' && s[i] <= '9')
        {
            ans.push_back(s[i]);
        }
        else
        {
            if(a1.empty())
               a1.push(s[i]);
            else
            {
                if (s[i] != '(' && s[i] != ')')
                {
                    if(gg(a1.top()) < gg(s[i]))
                    {
                        a1.push(s[i]);
                    }
                    else
                    {
                        while(gg(a1.top()) >= gg(s[i]))
                        {
                            char ch = a1.top();
                            ans.push_back(ch);
                            a1.pop();
                            if (a1.empty())
                                break;
                        }
                        a1.push(s[i]);
                    }
                }
                else if (s[i] == '(')
                {
                    a1.push(s[i]);
                }
                else if (s[i] == ')')
                {
                    while(a1.top() != '(')
                    {
                        char ch = a1.top();
                        ans.push_back(ch);
                        a1.pop();
                    }
                    a1.pop();
                }
            }

        }
    }
    while(!a1.empty())
    {
        char ch = a1.top();
        ans.push_back(ch);
        a1.pop();
    }
    for (i = 0; i < s.length()-1; ++i)
        cout<<ans[i]<<' ';
    cout<<ans[i]<<endl;
   int as[100] = {0}, k = 0, flag = 0;
    for (i = 0; i < ans.length(); ++i)
    {
        if (ans[i] < '0' || ans[i] > '9')
        {
            int ch = cal(as[k-2], as[k-1], ans[i]);
            as[k - 1] = 0;
            as[k - 2] = ch;
            k = k - 1;
            flag = 1;
        }
        else
        {
            as[k] = ans[i] - '0';
            k++;
        }
        if (flag == 1)
        {
            for (j = 0; j < k; ++j)
                cout<<as[j]<<' ';
            for (j = i + 1; j < s.length()-1; ++j)
                cout<<ans[j]<<' ';
            cout<<ans[j]<<endl;
            flag = 0;
        }
    }
    return 0;
}

2020/7/27 15:13
加载中...