7-25作业/重写ren_gao_zu

· · 个人记录

作业

D4348 括弧匹配检验

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
stack<char>t;
signed main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]=='('||s[i]=='['){
            t.push(s[i]);
        }
        if(s[i]==')'){
            if(t.size()==0||t.top()!='('){
                cout<<"Wrong";
                return 0;
            }
            else{
                t.pop();
            }

        }
        if(s[i]==']'){
            if(t.size()==0||t.top()!='['){
                cout<<"Wrong";
                return 0;
            }
            else t.pop();
        }
    }
    if(!t.size())cout<<"OK";
    else cout<<"Wrong";
    return 0;
}

D4350 计算(calc)

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
stack<int>num;
stack<char>op;
int nb=0;
int yxj(char c){
    if(c=='^')return 3;
    if(c=='*'||c=='/')return 2;
    if(c=='+'||c=='-')return 1;
    if(c=='(')return 0;
}
void yun(){
    int y=num.top();
    num.pop();
    int x=num.top();
    num.pop();
    char f=op.top();
    op.pop();
    if(f=='+')num.push(x+y);
    if(f=='-')num.push(x-y) ;
    if(f=='*')num.push(x*y) ;
    if(f=='/')num.push(x/y) ;
    if(f=='^')num.push(pow(x,y));
}
signed main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9'){
            nb=nb*10+s[i]-'0';
        }
        else{
            if(s[i]=='(')op.push(s[i]);
            if(s[i-1]<='9'&&s[i-1]>='0'){
                num.push(nb);
                nb=0;
            }
            if(s[i]==')'){
                while(op.top()!='(')yun();
                op.pop();
            }
            if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='^'){
                while(!op.empty()&&yxj(op.top())>=yxj(s[i]))yun();
                op.push(s[i]);
            }

        }
    }
    int l=s.size()-1;
    if(s[l]>='0'&&s[l]<='9')num.push(nb);
    while(op.size()){
        yun();
    }cout<<num.top();
    return 0;
}

重写

D20011 简单计算

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
stack<int>num;
stack<char>op;
int nb=0;
int yxj(char c){
    if(c=='^')return 3;
    if(c=='*'||c=='/')return 2;
    if(c=='+'||c=='-')return 1;
}
void suan(){
    int x=num.top();
    num.pop();
    int y=num.top();
    num.pop();
    char f=op.top();
    op.pop();
    if(f=='+')num.push(x+y);
    if(f=='-')num.push(y-x) ;
    if(f=='*')num.push(x*y) ;
    if(f=='/')num.push(y/x) ;
    if(f=='^')num.push(pow(y,x)) ;
}
signed main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9'){
            nb=nb*10+s[i]-'0';
        }
        else{
            num.push(nb);
            nb=0;
            while(op.size()&&yxj(op.top())>=yxj(s[i]))suan();
            op.push(s[i]);
        }
    }
    num.push(nb);
    while(op.size()){
        suan();
    }cout<<num.top();
    return 0;
}