题目链接: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; }
原文地址:http://blog.csdn.net/david_jett/article/details/44871527