Pagini recente » Cod sursa (job #2926605) | Cod sursa (job #1591959) | Cod sursa (job #847173) | Cod sursa (job #2345229) | Cod sursa (job #1823276)
#include <cstdio>
#include <string.h>
using namespace std;
char s[100005];
int getNumber(const int& n, int& i);
int calculate(const int& n, int& i);
int parenthesis(const int& n, int& i);
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s+1);
s[0] = '(';
int n = strlen(s + 1) + 1;
s[n] = ')';
int i = 0;
printf("%d", parenthesis(n, i));
return 0;
}
int getNumber(const int& n, int& i){
if(s[i] == '('){
return parenthesis(n, i);
}
int ret = 0;
while(i <= n && s[i] >= '0' && s[i] <= '9'){
ret = ret * 10 + (s[i] - '0');
i++;
}
return ret;
}
int calculate(const int& n, int& i){
int ret;
if(s[i] == '('){
ret = parenthesis(n, i);
}else{
ret = getNumber(n, i);
}
while(i <= n){
switch(s[i]){
case '*':
i++;
ret *= getNumber(n, i);
break;
case '/':
i++;
ret /= getNumber(n, i);
break;
default:
return ret;
break;
}
}
return ret;
}
int parenthesis(const int& n, int& i){
i++;
int ret;
if(s[i] == '('){
ret = parenthesis(n, i);
}else{
ret = getNumber(n, i);
}
while(i <= n){
switch(s[i]){
case '+':
i++;
ret += calculate(n, i);
break;
case '-':
i++;
ret -= calculate(n, i);
break;
case '*':
i++;
ret *= getNumber(n, i);
break;
case '/':
i++;
ret /= getNumber(n, i);
break;
case ')':
i++;
return ret;
break;
}
}
return ret;
}