Pagini recente » Cod sursa (job #647216) | Cod sursa (job #732077) | Cod sursa (job #2528110) | Cod sursa (job #677965) | Cod sursa (job #670713)
Cod sursa(job #670713)
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
char sir[100000];
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int eval(int x, int y)
{
int i,ok=1;
int k=0;
if(sir[x]=='(' && sir[y]==')')
for(i=y;i>=x;i--) {
if(sir[i]=='(') {
k++;
} else if (sir[i]==')') {
k--;
} else if (sir[i]=='+' && k==0) {
return eval(x,i-1) + eval(i+1,y);
} else if (sir[i]=='-' && k==0) {
return eval(x,i-1) - eval(i+1,y);
if(k==0) {
ok=0;
break;
}
}
if(ok) {
return eval(x+1,y-1);
}
}
for(i=y;i>=x;i--) {
if(sir[i]=='(') {
k++;
} else if (sir[i]==')') {
k--;
} else if (sir[i]=='+' && k==0) {
return eval(x,i-1) + eval(i+1,y);
} else if (sir[i]=='-' && k==0) {
return eval(x,i-1) - eval(i+1,y);
}
}
k=0;
for(i=y;i>=x;i--) {
if(sir[i]=='(') {
k++;
} else if (sir[i]==')') {
k--;
} else if (sir[i]=='*' && k==0) {
return eval(x,i-1) * eval(i+1,y);
} else if (sir[i]=='/' && k==0) {
return eval(x,i-1) / eval(i+1,y);
}
}
char nr[100];
strncpy(nr, &sir[x], y - x + 1);
nr[y - x + 1] = '\0';
int ret;
sscanf(nr, "%i", &ret);
return ret;
}
int main()
{
f.getline(sir,100000);
g<<eval(0,strlen(sir)-1);
}