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.
题意:
给你数字和运算符进行运算,输出运算结果!
思路:
运用switch进行不同情况的分类,分为第一个运算符为+或-,第二个为*或/或%,那么要先运算后面的两个数字;如果与前面情况相反,则先运算前两个数字!
细节:
难点就在优先级上,一开始我的思路是列举所用的16种情况,但一想太复杂,只需要将运算符优先级分好即可,加减为低一级,*/%为高一级!
代码:
#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;
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;
}
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);
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;
}
心得: