Pagini recente » Cod sursa (job #1722904) | Cod sursa (job #2696312) | Cod sursa (job #3139511) | Cod sursa (job #2724615) | Cod sursa (job #779104)
Cod sursa(job #779104)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
int cnt,a,lg;
long eval_expresie();
long eval_termen();
long eval_factor();
int main()
{
f.getline(s,100003,'\n');
lg=strlen(s);
a=eval_expresie();
g<<a<<'\n';
f.close();
g.close();
return 0;
}
long eval_expresie(){
long S;
S=eval_termen();
while(cnt<lg&&(s[cnt]=='+'||s[cnt]=='-')){
cnt++;
if(s[cnt-1]=='+')
S+=eval_termen();
else
S-=eval_termen();}
cnt++;
return S;}
long eval_termen(){
long p;
p=eval_factor();
while(cnt<lg&&(s[cnt]=='*'||s[cnt]=='/')){
cnt++;
if(s[cnt-1]=='*')
p*=eval_factor();
else
p/=eval_factor();}
return p;}
long eval_factor(){
switch(s[cnt]){
case '(':
cnt++;
return eval_expresie();
case '-':
cnt++;
a=0;
while(s[cnt]>='0'&&s[cnt]<='9'){
a=a*10+(s[cnt]-'0');
cnt++;}
return -a;
default:
a=s[cnt++]-'0';
while(s[cnt]>='0'&&s[cnt]<='9'){
a=a*10+s[cnt]-'0';
cnt++;}
return a;}}