# PBinfo #2638 – eval_exp – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Se consideră o expresie formată din numere naturale și operatorii +, -, *.

Cerința
Să se evalueze expresia.

Date de intrare
Programul citește de la tastatură expresia.

Date de ieșire
Programul va afișa pe ecran un singur număr reprezentând valoarea expresiei.

Restricții și precizări

Lungimea expresiei va fi de cel mult 50 de caractere
Rezultatul final precum și rezultatele intermediare se vor încadra în tipul de date long long
Expresia este corectă și nu conține alte caractere în afară de cifre și operatorii +, -, *.

Exemplu:
Intrare

234-10+21*12
Ieșire

476

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
char s[60];
long long st[60];
int top;
inline int Cifra(char ch)
{
    return ('0' <= ch && ch <= '9');
}
int main()
{
    int i, semn = 1, op = 0;
    long long suma, x;
    cin >> s;
    for (i = 0; s[i]; )
        if (!Cifra(s[i]))
        {
            if (s[i] == '-') semn = -1;
            else semn = 1;
            if (s[i] == '*') op = 1;
            else op = 0;
            i++;
        }
        else
        {
            x = 0;
            while ('0' <= s[i] && s[i] <= '9')
            {
                x = x * 10 + s[i] - '0';
                i++;
            }
            x *= semn;
            if (op == 1) st[top] = st[top] * x;
            else st[++top] = x;
            semn = 1;
            op = 0;
        }
    suma = 0;
    for (i = 1; i <= top; i++)
        suma += st[i];
    cout << suma << "\n";
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2638)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2638/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2638/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
