Pagini recente » Cod sursa (job #4083) | Statistici Petru Cristea (petru.theodor07) | Monitorul de evaluare | Cod sursa (job #164833) | Cod sursa (job #155456)
Cod sursa(job #155456)
#include<fstream.h>
#include<string.h>
#define max 100000
char x[max], o[max/2];
long v[max/2], n, k=-1, l=-1, i;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
void solve();
void calc();
long det();
int main()
{ f.getline(x, max);
n=strlen(x);
solve();
return 0;
}
void solve()
{ for(i=0; i<n; i++)
{ switch(x[i])
{ case '+':
case '-':
case '*':
case '/':
case '(':
l++; o[l]=x[i]; break;
case ')':
while(o[l]!='(')
{ calc();
l--;
}
l--;
break;
default :
k++; v[k]=det();
while(o[l]=='*' || o[l]=='/')
{ calc(); l--;
}
break;
}
}
while(l>=0)
{ calc(); l--;
}
g<<v[0]<<'\n';
}
void calc()
{ switch(o[l])
{ case '+':
v[k-1]=v[k-1]+v[k]; k--; break;
case '-':
if(k==0)
{ v[k]=-v[k];
break;
}
v[k-1]=v[k-1]-v[k]; k--; break;
case '*':
v[k-1]=v[k-1]*v[k]; k--; break;
case '/':
v[k-1]=v[k-1]/v[k]; k--; break;
}
}
long det()
{ long n;
n=0;
while(x[i]<58 && x[i]>47)
{ n=n*10+(x[i]-'0');
i++;
}
i--;
return n;
}