Cod sursa(job #2956505)

Utilizator lucaxsofLuca Sofronie lucaxsof Data 19 decembrie 2022 17:53:03
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.02 kb
#define _CRT_SECURE_NO_WARNINGS
#include <math.h>
#include <vector>
#include <iomanip>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <bitset>
#include <string>
//#include <bits/stdc++.h>
using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

const int mod = 1e9 + 7;
const int NMAX = 1e5 + 3;
const double eps = 1e-7;                                                     

char s[NMAX];

int p;
int expresie();     // o expresie este alcatuita din mai multi termeni cu + sau - 
int termen();       //termenul este un nr alcatuit din factori inmultiti sau impartiti intre ei
int factor();       //factorul este efectiv numarul numeric ( ceva unitar )

void read()
{
    cin >> s;
}

int expresie()  // a + sau - b;     //expresia e de forma    e() = a+ b+ c- d...
{
    int sum = termen();
    while (s[p] == '+' || s[p] == '-')
    {
        if (s[p] == '+')
        {
            p++;
            sum += termen();
        }
        else
        {
            p++;
            sum -= termen();
        }
    }
    return sum;
}

int termen()    //un termen este de forma    a= b/i*c
{
    int prod = factor();
    while (s[p] == '*' || s[p] == '/')
    {
        if (s[p] == '*')
        {
            p++;
            prod *= factor();
        }
        else
        {
            p++;
            prod /= factor();
        }
    }
    return prod;
}

int factor()
{
    int val = 0, semn = 1;
    while (s[p] == '-')
    {
        p++;
        semn = (-semn);
    }
    if (s[p] == '(')
    {
        p++;
        val = expresie();
        p++;
        return semn * val;
    }
    while ('0' <= s[p] and s[p] <= '9')
    {
        val = val * 10 + (s[p] - '0');
        p++;
    }
    return semn * val;
    


}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    read();
    cout << expresie();
}