Pagini recente » Cod sursa (job #1858624) | Cod sursa (job #146833) | Cod sursa (job #1205302) | Cod sursa (job #1601030) | Cod sursa (job #2917175)
#include <iostream>
#include <fstream>
#include<cstring>
using namespace std;
char v[100001];
int p = 0;
int n;
int expresie();
int termen();
int factor();
int expresie(){
int val = termen();
while(p < n && (v[p] == '+' || v[p] == '-')){
if(v[p] == '+'){
p++;
val += termen();
}else{
p++;
val -= termen();
}
}
return val;
}
int termen(){
int val = factor();
while(p < n && (v[p] == '*' || v[p] == '/')){
if(v[p] == '*'){
p++;
val *= factor();
}else{
p++;
val /= factor();
}
}
return val;
}
int factor(){
int semn = 1;
int val;
while(v[p] == '+' || v[p] == '-'){
if(v[p] == '-')
semn = -semn;
p++;
}
if(v[p] == '('){
p++;//sar de paranteza deschisa
val = expresie();
p++;
}else{
//construim numarul
int nr = 0;
while(v[p] >= '0' && v[p] <= '9'){
nr = nr*10 + v[p] - '0';
p++;
}
val = nr;
}
val = val*semn;
return val;
}
int main()
{
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
fin.getline(v, 100001);
n = strlen(v);
fout << expresie();
fin.close();
fout.close();
return 0;
}