Cod sursa(job #3225640)

Utilizator tudor_costinCostin Tudor tudor_costin Data 18 aprilie 2024 12:15:23
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int pos=0;
int termen();
int prod();
int suma();
bool iscif(char ch)
{
    if('0'<=ch && ch<='9') return true;
    return false;
}
int getnr()
{
    int nr=0;
    while(pos<s.size() && iscif(s[pos]))
    {
        nr=nr*10+(s[pos]-'0');
        pos++;
    }
    return nr;
}
int termen()
{
    if(s[pos]=='(')
    {
        pos++;
        int val=suma();
        pos++;
        return val;
    }
    else
    {
        int nr=getnr();
        return nr;
    }
}
int prod()
{
    int nr=termen();
    while(pos<s.size() && (s[pos]=='*' || s[pos]=='/'))
    {
        if(s[pos]=='*')
        {
            pos++;
            int nxt=termen();
            nr=nr*nxt;
        }
        else
        {
            pos++;
            int nxt=termen();
            nr=nr/nxt;
        }
    }
    return nr;
}
int suma()
{
    int nr=prod();
    while(pos<s.size() && (s[pos]=='+' ||s[pos]=='-'))
    {
        int semn;
        if(s[pos]=='+') semn=1;
        else semn=-1;
        pos++;
        int nxt=prod();
        nr=nr+semn*nxt;
    }
    return nr;
}
signed main()
{
    fin>>s;
    fout<<suma();
    return 0;
}