Pagini recente » Cod sursa (job #545609) | Cod sursa (job #655771) | Cod sursa (job #2440078) | Cod sursa (job #3135662) | Cod sursa (job #1127377)
#include<stdio.h>
#include<string.h>
#define DIM 100005
FILE *f=fopen("evaluare.in","r"), *g=fopen("evaluare.out","w");
long int Ls, P;
char s[DIM];
long int DecodareNumar(){
long int nr;
nr=0;
while('0' <= s[P] && s[P] <= '9'){
nr=nr*10+ (s[P]-'0'); P++;
}
return nr;
}
long int Rezolva(){
long int sum=0, inter=1; // sum = final, inter = intermediar
long int SemnPM=1; // 0 = -, 1 = +
long int SemnII=1; // 0 = /, 1 = *
while(P<Ls){
if( s[P]=='-' || s[P]=='+' || s[P]==')' ){
if( SemnPM == 0 ) { sum-=inter; inter=1; SemnII=1; }
else { sum+=inter; inter=1; SemnII=1; }
}
if( s[P]=='-' ){ SemnPM=0; P++; }
else if( s[P]=='+' ){ SemnPM=1; P++; }
else if( s[P]=='/' ){ SemnII=0; P++; }
else if( s[P]=='*' ){ SemnII=1; P++; }
else if( s[P]==')' ){ P++; return sum; }
else if( '0' <= s[P] && s[P] <= '9' ){
if( SemnII==0 ) inter/= DecodareNumar();
else inter*= DecodareNumar();
}
else if( s[P]=='(' ){
P++;
if( SemnII==0 ) inter/= Rezolva();
else inter*= Rezolva();
}
}
if( SemnPM == 0 ) { sum-=inter; inter=1; SemnII=1; }
else { sum+=inter; inter=1; SemnII=1; }
return sum;
}
int main(){
fscanf(f,"%s\n",s);
Ls=strlen(s); P=0;
fprintf(g,"%ld\n",Rezolva());
return 0;
}