Pagini recente » Cod sursa (job #372884) | Cod sursa (job #2083484) | Cod sursa (job #2272468) | Cod sursa (job #3270314) | Cod sursa (job #151854)
Cod sursa(job #151854)
#include<stdio.h>
#include<string.h>
#define INPUT "evaluare.in"
#define OUTPUT "evaluare.out"
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
void readValues();
long solveFunction();
inline void printSolution(long val){fprintf(fout, "%ld\n", val);}
long preiaNumar();
long pozitie,nr;
char vect[100002];
int main(){
readValues();
pozitie=0;
printSolution(solveFunction());
fclose(fin);
fclose(fout);
return 0;
}
void readValues(){
char ch;
fscanf(fin, "%c", &ch);
vect[0]='(';
nr=1;
while(ch!='\n'&&!feof(fin)){
vect[nr++]=ch;
fscanf(fin, "%c", &ch);
}
vect[nr++]=')';
}
long solveFunction(){
long val1,val2,val3,val0;
int exista;
char semn,semn2,semnSchimb;
val0=0;
exista=0;
val1=preiaNumar();
while(vect[pozitie]!=')'&&pozitie<nr){
semn=vect[pozitie];
if(semn=='*'||semn=='/'){
++pozitie;
if(vect[pozitie]=='('){
++pozitie;
val2=solveFunction();
}
else
val2=preiaNumar();
if(semn=='*') val1*=val2;
else if(semn=='/') val1/=val2;
}
else
if(semn=='+' || semn=='-'){
if(exista){
if(semnSchimb=='+') val1+=val0;
else if(semnSchimb=='-') val1=val0-val1;
exista=0;
semnSchimb='\0';
}
++pozitie;
if(vect[pozitie]=='('){
++pozitie;
val2=solveFunction();
}
else
val2=preiaNumar();
semn2=vect[pozitie];
if(semn2=='+'||semn2=='-'||semn2==')'){
if(semn=='+') val1+=val2;
else if(semn=='-') val1-=val2;
}
else{
++pozitie;
if(vect[pozitie]=='('){
++pozitie;
val3=solveFunction();
}
else
val3=preiaNumar();
if(semn2=='*') val2*=val3;
else if(semn2=='/') val2/=val3;
val0=val1;
semnSchimb=semn;
exista=1;
val1=val2;
}
}
else
if(semn=='('){
++pozitie;
val1=solveFunction();
}
}
if(exista){
if(semnSchimb=='+') val1+=val0;
else if(semnSchimb=='-') val1=val0-val1;
exista=0;
semnSchimb='\0';
}
++pozitie;
return val1;
}
long preiaNumar(){
long x=0;
while(vect[pozitie]>='0' && vect[pozitie]<='9'){
x=x*10+vect[pozitie]-'0';
++pozitie;
}
return x;
}