fbpx

Problema #2638 – eval_exp – Rezolvari PBInfo

de Mihai-Alexandru

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
#include <bits/stdc++.h>
using namespace std;
char s[60];
long long v[60] , c , x , suma;
int Cifra(char s){return (s >= '0' && s <= '9');}

int main()
{
    int semn = 1 , ori = 0 , i = 0;
    cin >> s;
    while(s[i] != '\0')
    {
        if(!Cifra(s[i]))
        {
            if(s[i] == '+') semn = 1;
            else if(s[i] == '-') semn = -1;
            else if(s[i] == '*') ori = 1;
            else ori = 0;
            i++;
        }
        else
        {
            x = 0;
            while(Cifra(s[i]))
            {
                x = x * 10 + s[i] - '0';
                i++;
            }
            x *= semn;
            if(ori == 1) v[c] = v[c] * x;
            else v[++c] = x;
            semn = 1;
            ori = 0;
        }
    }
    for(i = 1 ; i <= c ; i++) suma +=  v[i];
    cout << suma;
    return 0;
}
Comentarii

S-ar putea sa iti placa