Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.61 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <string.h>
  5.  
  6.  
  7. int resolver(char *expressao, int *i){
  8.     // Caso 1: expressao[*i] e qualquer outra coisa
  9.     int result = 0;
  10.     while( expressao[*i] != '\0'){
  11.         // Caso 3: expressao[*i] == ')'
  12.         if(expressao[*i] == ')'){
  13.             (*i)++;
  14.             return result;
  15.         }
  16.         else if(expressao[*i] == '('){
  17.             if((*i) == 0){
  18.                 result = resolver(expressao, i);
  19.             } else{
  20.                 if(expressao[(*i)-1] == '+'){
  21.                     result += resolver(expressao, (*i)+1);
  22.                 }
  23.                 if(expressao[(*i)-1] == '*'){
  24.                     result *= resolver(expressao, (*i)+1);
  25.                 }
  26.                 if(expressao[(*i)-1] == '/'){
  27.                     result /= resolver(expressao, (*i)+1); // 3 + 34 *(6 +3 + 2 + (3 + 5 + (2 * 9))) + 3
  28.                 }
  29.                 if(expressao[(*i)-1] == '-'){
  30.                     result -= resolver(expressao, (*i)+1);
  31.                 }
  32.             }
  33.             (*i)++;
  34.         }
  35.         else{
  36.             if((*i)== 0){
  37.                 result = expressao[*i] - '0';
  38.             }
  39.             else if(expressao[(*i)-1] == '+'){
  40.                 result += expressao[*i] - '0';
  41.             }
  42.             else if(expressao[(*i)-1] == '*'){
  43.                 result *= expressao[*i] - '0';
  44.             }
  45.             else if(expressao[(*i)-1] == '/'){
  46.                 result /= expressao[*i] - '0';
  47.             }
  48.             else if(expressao[(*i)-1] == '-'){
  49.                 result -= expressao[*i] - '0';
  50.             }  
  51.             (*i) +=2;
  52.         }
  53.  
  54.         if(expressao[*i] == '+' || expressao[*i] == '*' || expressao[*i] == '-' || expressao[*i] == '/'){
  55.             (*i)++;
  56.         }
  57.  
  58.         if((*i) >= strlen(expressao)){
  59.             break;
  60.         }
  61.     }
  62.     return result;
  63. }
  64.  
  65. int main() {
  66.     char expressao[30] = {0};
  67.     scanf("%s", expressao);
  68.  
  69.     int inicio = 0;
  70.     int r = resolver(expressao, &inicio);
  71.     printf("%d\n", r);
  72.  
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement