View Code of Problem 94

#include <stdio.h>
#include <string.h>
//(* 2 (* 3 4) (* 3 5))
//(+ 2 (* 3 4) (+ 3 5))
int fun(char s[100],int start,int end){
	if(s[start+1]=='*'){
		int sum=1;
		for(int i=start+3;i<=end;i++){
			if(s[i]>='0'&&s[i]<='9'){
				int j=s[i]-'0';
				while(s[++i]!=' '&&s[i]!=')'){
					j=j*10+s[i]-'0';
				}
				sum*=j;
			}else if(s[i]=='('){
				int k=i+1,count=1;
				while(count!=0){
					if(s[k]==')'){
						count--;
					}else if(s[k]=='('){
						count++;
					}
					k++;
				}
				sum*= fun(s,i,k-1);
				i=k;
			}
		}
		return sum;
	}else if(s[start+1]=='/'){
		int sum,i=start+3;
		if(s[i]>='0'&&s[i]<='9'){
			int j=s[i]-'0';
			while(s[++i]!=' '&&s[i]!=')'){
				j=j*10+s[i]-'0';
			}
			sum=j;
			i=i+1;
		}else if(s[i]=='('){
			int k=i+1,count=1;
			while(count!=0){
				if(s[k]==')'){
					count--;
				}else if(s[k]=='('){
					count++;
				}
				k++;
			}
			sum = fun(s,i,k-1);
			i=k+1;
		}
		
		for(;i<=end;i++){
			if(s[i]>='0'&&s[i]<='9'){
				int j=s[i]-'0';
				while(s[++i]!=' '&&s[i]!=')'){
					j=j*10+s[i]-'0';
				}
				sum/=j;
			}else if(s[i]=='('){
				int j=i+1,count=1;
				while(count!=0){
					if(s[j]==')'){
						count--;
					}else if(s[j]=='('){
						count++;
					}
					j++;
				}
				sum/= fun(s,i,j-1);
				i=j;
			}
		}
		return sum;
	}else if(s[start+1]=='+'){
		int sum=0;
		for(int i=start+3;i<=end;i++){
			if(s[i]>='0'&&s[i]<='9'){
				int j=s[i]-'0';
				while(s[++i]!=' '&&s[i]!=')'){
					j=j*10+s[i]-'0';
				}
				sum+=j;
			}else if(s[i]=='('){
				int k=i+1,count=1;
				while(count!=0){
					if(s[k]==')'){
						count--;
					}else if(s[k]=='('){
						count++;
					}
					k++;
				}
				sum+= fun(s,i,k-1);
				i=k;
			}
		}
		return sum;
	}else if(s[start+1]=='-'){
		int sum,i=start+3;
		if(s[i]>='0'&&s[i]<='9'){
			int j=s[i]-'0';
			while(s[++i]!=' '&&s[i]!=')'){
				j=j*10+s[i]-'0';
			}
			sum=j;
			i=i+1;
		}else if(s[i]=='('){
			int k=i+1,count=1;
			while(count!=0){
				if(s[k]==')'){
					count--;
				}else if(s[k]=='('){
					count++;
				}
				k++;
			}
			sum = fun(s,i,k-1);
			i=k+1;
		}
		
		for(;i<=end;i++){
			if(s[i]>='0'&&s[i]<='9'){
				int j=s[i]-'0';
				while(s[++i]!=' '&&s[i]!=')'){
					j=j*10+s[i]-'0';
				}
				sum-=j;
			}else if(s[i]=='('){
				int j=i+1,count=1;
				while(count!=0){
					if(s[j]==')'){
						count--;
					}else if(s[j]=='('){
						count++;
					}
					j++;
				}
				sum -= fun(s,i,j-1);
				i=j;
			}
		}
		return sum;
	}
} 

int main(){
	char s[100];
	gets(s);
	int result = fun(s,0,strlen(s)-1);
	printf("%d\n",result);
}

Double click to view unformatted code.


Back to problem 94