Cod sursa(job #2969611)

Utilizator DomnulMilandruMilandru Nicon-David DomnulMilandru Data 23 ianuarie 2023 14:33:23
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
char s[100005];
int finder(int dr,int st,char x1,char x2)
{
    int nr=0;
    for(int i=dr;i>=st;i--)
    {
        if(s[i]==')')
           nr++;
         if(s[i]=='(')
            nr--;
       if(nr==0 && (s[i]==x1 || s[i]==x2))
           return i;
    }
    return -23;
}
int solve(int st,int dr)
{
    int find=finder(dr,st,'+','-');
    if(find!=-23)
    {
        long long e1=solve(st,find-1);
         long long e2=solve(find+1,dr);
        if(s[find]=='+')
           return e1+e2;
          else
            return e1-e2;
    }
    find=finder(dr,st,'*','/');
    if(find!=-23)
    {
        long long e1=solve(st,find-1);
        long long e2=solve(find+1,dr);
        if(s[find]=='*')
           return e1*e2;
          else
            return e1/e2;
    }
    if(s[st]=='(' && s[dr]==')')
       return solve(st+1,dr-1);
     long long nou=0;
    for(int i=st;i<=dr;i++)
        nou=nou*10+(s[i]-'0');
        return nou;
}
int main()
{
    cin>>s;
    cout<<solve(0,strlen(s)-1);
    return 0;
}