题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3782
题意:
求给定的算式的结果。
法一:
因为固定三个数字,两个运算符,直接if else就行。
代码:
#include<iostream>
using namespace std;
int main()
{
int t;
char x,y;
int a,b,c,tmp,ans;
cin>>t;
while(t--)
{
cin>>a>>x>>b>>y>>c;
if((x=='+'||x=='-')&&(y=='*'||y=='/'||y=='%'))
{
if(y=='*')tmp=b*c;
else if(y=='/')tmp=b/c;
else tmp=b%c;
if(x=='+')ans=a+tmp;
else ans=a-tmp;
}
else
{
if(x=='+')tmp=a+b;
else if(x=='-')tmp=a-b;
else if(x=='*')tmp=a*b;
else if(x=='/')tmp=a/b;
else if(x=='%')tmp=a%b;
if(y=='+')ans=tmp+c;
else if(y=='-')ans=tmp-c;
else if(y=='*')ans=tmp*c;
else if(y=='/')ans=tmp/c;
else if(y=='%')ans=tmp%c;
}
cout<<ans<<endl;
}
return 0;
}
法二:
正规解法:
原文链接:http://blog.csdn.net/libin56842/article/details/23616823
代码:
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
int i,t;
scanf("%d%*c",&t);
int a,b;
char s[250],c;
while(t--)
{
gets(s);
stack<char>s1;
stack<int>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;
}