16pts!!哪里错了啊啊啊啊啊

P1449 后缀表达式

XinFengIneverleft @ 2023-08-26 16:30:42

#1 AC\ #2 #4 RE\ #3 #5 #6 WA

#include <bits/stdc++.h>
using namespace std;
int sum;

int main() {
    string s;
    cin >> s;
    int lens = s.length();
    stack<char> a;
    char x, y, z;
    for (int i = 0; i < lens; i++) {
        a.push(s[i]);
        if (a.top() == '+') {
            a.pop();
            a.pop();
            x = a.top() - 48;
            a.pop();
            a.pop();
            y = a.top() - 48;
            a.pop();
            z = (x + y) + 48;
            a.push(z);
            a.push('.');
        }
        if (a.top() == '-') {
            a.pop();
            a.pop();
            x = a.top() - 48;
            a.pop();
            a.pop();
            y = a.top() - 48;
            a.pop();
            z = (y - x) + 48;
            a.push(z);
            a.push('.');
        }
        if (a.top() == '*') {
            a.pop();
            a.pop();
            x = a.top() - 48;
            a.pop();
            a.pop();
            y = a.top() - 48;
            a.pop();
            z = (x * y) + 48;
            a.push(z);
            a.push('.');
        }
        if (a.top() == '/') {
            a.pop();
            a.pop();
            x = a.top() - 48;
            a.pop();
            a.pop();
            y = a.top() - 48;
            a.pop();
            z = (y / x) + 48;
            a.push(z);
            a.push('.');
        }
    }
    cout << a.top() - 48;
    return 0;
}

by Lzc0316 @ 2023-08-28 11:33:04

操作数可能是两位数三位数,所以不能单字符入栈

这是我的代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    stack<long long>a;
    long long e=0;/*暂存数字的容器*/
    for(long long t=0;t<s.size();t++){
        if(s[t]>='0'&&s[t]<='9')e=e*10+(s[t]-'0');/*如果是数字就输入到容器(因为操作数可能不止一位)*/
        if(s[t]=='.'){
            a.push(e);
            e=0;/*如果是结束符就把数字入栈,清空容器*/
        }
        if(s[t]=='+'||s[t]=='-'||s[t]=='*'||s[t]=='/'){
            /*x和y的顺序是反过来的 */
            long long y=a.top();
            a.pop();
            long long x=a.top();
            a.pop();
            if(s[t]=='+')a.push(x+y);
            if(s[t]=='-')a.push(x-y);
            if(s[t]=='*')a.push(x*y);
            if(s[t]=='/')a.push(x/y);
        }
        if(s[t]=='@')cout<<a.top();
    }
    return 0;
}

by XinFengIneverleft @ 2023-08-28 19:13:49

@Lzc0316 好的谢谢大佬


|