Pagini recente » Cod sursa (job #1156781) | Cod sursa (job #2121676) | Cod sursa (job #1698694) | Cod sursa (job #2379834) | Cod sursa (job #1464250)
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int N; // vezi a treia metoda de rezolvare pentru explicatii
char sir[100010];
char* p=sir;
int eval();
int termen();
int factor();
int main()
{
f>>sir;
N=strlen(sir);
g<<eval();
f.close();g.close();
return 0;
}
int eval() {
int rez=termen();
while (*p=='+' || *p=='-') {
switch (*p) {
case ('+'): {
++p;
rez+=termen();
break;
}
case ('-'): {
++p;
rez-=termen();
break;
}
}
}
return rez;
}
int termen() {
int rez=factor();
while (*p=='*' || *p=='/') {
switch (*p) {
case ('*'): {
++p;
rez*=factor();
break;
}
case ('/'): {
++p;
rez/=factor();
break;
}
}
}
return rez;
}
int factor() {
int rez=0;
if (*p=='(') {
++p;
rez=eval();
++p;
}
else {
while (*p>='0' && *p<='9') {
rez=rez*10+*p-'0';
++p;
}
}
return rez;
}