Code di bawah ini merupakan penyelesaian dari salah satu problem SPOJ yang bernama Transform The Expression dalam bahasa C. Accepted 0.00 s.
Problem url: spoj.com/problems/ONP
#include <stdio.h>
#define MAX 500
void Push(char arr[], char in, int *top)
{ arr[++(*top)] = in;
}
char Pop(char arr[], int *top)
{ return arr[(*top)--];
}
void PrintData(char *arr, int top)
{ int i;
for(i = 0; i <= top; i++)
printf("%c", arr[i]);
printf("\n");
}
void Process(char *ar1, char *ar2)
{ // 1 = var; 2 = operator
int top1 = -1, top2 = -1;
char temp, tmp;
while(scanf("%c", &temp) && temp != '\n')
{ switch(temp)
{ case '(':
Push(ar2, temp, &top2);
break;
case ')':
while((tmp = Pop(ar2, &top2)) != '(')
Push(ar1, tmp, &top1);
break;
case '+':
case '-':
if((top2 != -1) && (ar2[top2] == '*' || ar2[top2] == '/' || ar2[top2] == '^'))
Push(ar1, Pop(ar2, &top2), &top1);
Push(ar2, temp, &top2);
break;
case '*':
case '/':
if(top2 != -1 && ar2[top2] == '^')
Push(ar1, Pop(ar2, &top2), &top1);
case '^':
Push(ar2, temp, &top2);
break;
default:
Push(ar1, temp, &top1);
break;
}
}
while(top2 != -1)
Push(ar1, Pop(ar2, &top2), &top1);
PrintData(ar1, top1);
}
int main()
{ char ar1[MAX], ar2[MAX];
int T;
scanf("%d", &T);
getchar();
while(T--)
Process(ar1, ar2);
}
No comments:
Post a Comment