Mai intai trebuie sa te autentifici.
Cod sursa(job #267167)
| Utilizator | Data | 26 februarie 2009 20:26:11 | |
|---|---|---|---|
| Problema | Evaluarea unei expresii | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.8 kb |
#include<stdio.h>
#define nmax 100010
FILE *f=fopen("evaluare.in","r"), *g=fopen("evaluare.out","w");
char s[nmax],*p;
long factor();
long termen();
long eval()
{
long r=termen();
while(*p=='+' || *p=='-')
{
if(*p=='+')
{
p++;
r+=termen();
}
else if(*p=='-')
{
p++;
r-=termen();
}
}
return r;
}
long termen()
{
long r=factor();
while(*p=='*' || *p=='/')
{
if(*p=='*')
{
p++;
r*=factor();
}
else if(*p=='/')
{
p++;
r/=factor();
}
}
return r;
}
long factor()
{
long r=0;
if(*p=='(') {p++; r=eval();p++;}
else
while(*p<='9' && *p>='0')
{
r=r*10+*p-'0';
p++;
}
return r;
}
int main()
{
fgets(s,nmax,f);p=s;
fprintf(g,"%ld\n",eval());
fclose(f);
fclose(g);
return 0;
}