ZOJ3782:Ternary Calculation

2014-11-24 11:51:15 · 作者: · 浏览: 1

Complete the ternary calculation.

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

There is a string in the form of "number1 operatora number2 operatorb number3". Each operator will be one of {'+', '-' , '*', '/', '%'}, and each number will be an integer in [1, 1000].

Output

For each test case, output the answer.

Sample Input

5
1 + 2 * 3
1 - 8 / 3
1 + 2 - 3
7 * 8 / 5
5 - 8 % 3

Sample Output

7
-1
0
11
3

Note

The calculation "A % B" means taking the remainder of A divided by B, and "A / B" means taking the quotient.

简单计算器问题,要注意中间过程都按整型处理

#include
  
   
#include
   
     #include
    
      using namespace std; int main() { int i,t; scanf("%d%*c",&t); int a,b; char s[250],c; while(t--) { gets(s); stack
     
      s1; stack
      
       s2; for(i=0; s[i]; i++) { if(s[i]>='0'&&s[i]<='9') { a=0; while(s[i]>='0'&&s[i]<='9') { a=a*10+s[i]-'0'; i++; } i--; s2.push(a); } else if(s[i]=='-'||s[i]=='+') { if(!s1.empty()) { c=s1.top(); s1.pop(); a=s2.top(); s2.pop(); b=s2.top(); s2.pop(); if(c=='+') a+=b; else a=b-a; s2.push(a); s1.push(s[i]); } else s1.push(s[i]); } else if(s[i]=='/' || s[i] == '*' || s[i] == '%') { char ch = s[i]; b=0; i+=2; while(s[i]>='0'&&s[i]<='9') { b=b*10+s[i]-'0'; i++; } i--; a=s2.top(); s2.pop(); if(ch == '/') a=a/b; else if(ch == '*') a = a*b; else if(ch == '%') a = a%b; s2.push(a); } } while(!s1.empty()) { c=s1.top(); s1.pop(); a=s2.top(); s2.pop(); b=s2.top(); s2.pop(); if(c=='+') a+=b; else a=b-a; s2.push(a); } printf("%d\n",s2.top()); } return 0; }