Informatică, întrebare adresată de printess199, 8 ani în urmă

3549 pbinfo
Cerința
Se consideră o expresie formată din numere naturale, paranteze rotunde și operatorii +, -, *.

Date de intrare
Să se evalueze 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 simbolurile +, -, *, (, ).



Exemplu
Intrare

2340-(10+21)*12
Ieșire

1968
Explicație
2340-(10+21)*12 = 2340-31*12 = 2340-372 = 1968

Răspunsuri la întrebare

Răspuns de ana427257
10

Răspuns:

#include <bits/stdc++.h>

#define N 55

using namespace std;

///3549

char s[N],*p=s;

long long Termen();

long long Factor();

long long Eval()

{

   long long r=Termen();

   while(*p=='+' || *p=='-')

   switch(*p)

   {

       case '+': ++p; r+=Termen(); break;

       case '-': ++p; r-=Termen(); break;

   }

   return r;

}

long long Termen()

{

   long long r=Factor();

   while(*p=='*' || *p=='/')

   switch(*p)

   {

       case '*': ++p; r*=Factor(); break;

       case '/': ++p; r/=Factor(); break;

   }

   return r;

}

long long Factor()

{

   long long r=0;

   if(*p=='('){++p; r=Eval(); ++p;}

   else

   {

       while(*p>='0' && *p <='9')

       {

           r=r*10+*p-'0';

           ++p;

       }

   }

   return r;

}

int main()

{

 cin.get(s,N);

 cout<<Eval();

 return 0;

}

mai sus este solutia problemei.

Succes!

Alte întrebări interesante