Description
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 "number1operatoranumber2operatorbnumber3". 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<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e,t,i;
char op1,op2;
cin>>t;
while(t--)
{
cin>>a>>op1>>b>>op2>>c;
if((op1=='+'||op1=='-')&&(op2=='*'||op2=='/'||op2=='%'))
{
switch(op2)
{
case '*': d=b*c; break;
case '/': d=b/c; break;
case '%': d=b%c; break;
}
switch(op1)
{
case '+': e=a+d; break;
case '-': e=a-d; break;
}
}
else
{
switch(op1)
{
case '*': d=a*b; break;
case '/': d=a/b; break;
case '%': d=a%b; break;
case '+': d=a+b; break;
case '-': d=a-b; break;
}
switch(op2)
{
case '*': e=d*c; break;
case '/': e=d/c; break;
case '%': e=d%c; break;
case '+': e=d+c; break;
case '-': e=d-c; break;
}
}
cout<<e<<endl;
}
return 0;
}
另一种方法:
#include<stdio.h>
int fun(int m,char z,int n)
{
int ans=0;
//printf("%c\n",z);
switch(z)
{
case'+':ans=m+n;break;
case'-':ans=m-n;break;
case'*':ans=m*n;break;
case'/':ans=m/n;break;
case'%':ans=m%n;break;
}
//printf("%d\n",ans);
return ans;
}
int main()
{
int t,a,b,c,sum;
char x,y;
scanf("%d",&t);
while(t--)
{
sum=0;
scanf("%d %c %d %c %d",&a,&x,&b,&y,&c);
//printf("%d %c %d %c %d\n",a,x,b,y,c);
if(x=='*'||x=='/'||x=='%')
{
sum=fun(a,x,b);
sum=fun(sum,y,c);
}
else if(y=='*'||y=='/'||y=='%')
{
sum=fun(b,y,c);
sum=fun(a,x,sum);
}
else
{
sum=fun(a,x,b);
sum=fun(sum,y,c);
}
printf("%d\n",sum);
}
return 0;
}