Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- int resolver(char *expressao, int *i){
- // Caso 1: expressao[*i] e qualquer outra coisa
- int result = 0;
- while( expressao[*i] != '\0'){
- // Caso 3: expressao[*i] == ')'
- if(expressao[*i] == ')'){
- (*i)++;
- return result;
- }
- else if(expressao[*i] == '('){
- if((*i) == 0){
- result = resolver(expressao, i);
- } else{
- if(expressao[(*i)-1] == '+'){
- result += resolver(expressao, (*i)+1);
- }
- if(expressao[(*i)-1] == '*'){
- result *= resolver(expressao, (*i)+1);
- }
- if(expressao[(*i)-1] == '/'){
- result /= resolver(expressao, (*i)+1); // 3 + 34 *(6 +3 + 2 + (3 + 5 + (2 * 9))) + 3
- }
- if(expressao[(*i)-1] == '-'){
- result -= resolver(expressao, (*i)+1);
- }
- }
- (*i)++;
- }
- else{
- if((*i)== 0){
- result = expressao[*i] - '0';
- }
- else if(expressao[(*i)-1] == '+'){
- result += expressao[*i] - '0';
- }
- else if(expressao[(*i)-1] == '*'){
- result *= expressao[*i] - '0';
- }
- else if(expressao[(*i)-1] == '/'){
- result /= expressao[*i] - '0';
- }
- else if(expressao[(*i)-1] == '-'){
- result -= expressao[*i] - '0';
- }
- (*i) +=2;
- }
- if(expressao[*i] == '+' || expressao[*i] == '*' || expressao[*i] == '-' || expressao[*i] == '/'){
- (*i)++;
- }
- if((*i) >= strlen(expressao)){
- break;
- }
- }
- return result;
- }
- int main() {
- char expressao[30] = {0};
- scanf("%s", expressao);
- int inicio = 0;
- int r = resolver(expressao, &inicio);
- printf("%d\n", r);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement