Pagini recente » Cod sursa (job #595802) | Cod sursa (job #2092784) | Cod sursa (job #3162256) | Cod sursa (job #295837) | Cod sursa (job #3218093)
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <string.h>
const int32_t MAX_LEN = 100000;
char str[MAX_LEN + 1];
int32_t len, pos = 0;
int32_t Add();
int32_t Val() {
int32_t val = 0;
for(; pos != len && str[pos] >= '0' && str[pos] <= '9'; ++pos) {
val *= 10;
val += str[pos] - '0';
}
return val;
}
int32_t Paran() {
if(str[pos] == '(') {
++pos;
int32_t val = Add();
++pos;
return val;
} else {
return Val();
}
}
int32_t Mult() {
int32_t res = Paran();
while(pos != len && (str[pos] == '*' || str[pos] == '/')) {
char op = str[pos];
++pos;
int32_t val = Paran();
if(op == '*') {
res *= val;
} else {
res /= val;
}
}
return res;
}
int32_t Add() {
int32_t res = Mult();
while(pos != len && (str[pos] == '+' || str[pos] == '-')) {
char op = str[pos];
++pos;
int32_t val = Mult();
if(op == '+') {
res += val;
} else {
res -= val;
}
}
return res;
}
int main() {
std::ifstream fin("evaluare.in");
std::ofstream fout("evaluare.out");
fin.getline(str, MAX_LEN + 1);
len = strnlen(str, MAX_LEN);
fout << Add();
fin.close();
fout.close();
return 0;
}