#include <cstdio>
#include <cstring>

char s[100+10];
char buf[100+10];
int i;
bool getMul(int&);
bool getItem(int&);
bool getExpr(int&);
bool getMul(int &x){
    if(s[i]==' '){
        i++;
        return getMul(x);
    }
    if(s[i]=='('){
        i++;
        if(getExpr(x)==false) return false;
        if(s[i]!=')') return false;
        i++;
        return true;
    }
    int j=0,k;
    if(s[i]=='-'||s[i]=='+') buf[j++]=s[i++];
    for(k=0;s[i]>='0'&&s[i]<='9';i++,k++)
        buf[j++]=s[i];
    buf[j]=0;
    if(k==0) return false;
    sscanf(buf,"%d",&x);
    return true;
}
bool getItem(int &x){
    int y;
    if(getMul(x)==false) return false;
    while(s[i]=='*'||s[i]==' '){
        if(s[i]==' ') {i++;continue;}
        i++;
        if(getMul(y)==false) return false;
        x*=y;
    }
    return true;
}
bool getExpr(int &x){
    int y;
    char c;
    if(getItem(x)==false) return false;
    while(s[i]=='+'||s[i]=='-'||s[i]==' '){
        if(s[i]==' ') {i++;continue;}
        c=s[i];
        i++;
        if(getItem(y)==false) return false;
        if(c=='+') x+=y;
        else x-=y;
    }
    return true;
}

int main(){
    int x;
    i=0;
    gets(s);
    if(getExpr(x)==false||s[i])
        printf("WRONG");
    else printf("%d",x);
    return 0;
}

Последнее изменение: Суббота, 15 Август 2020, 02:35