HDU - 1237 简单计算器(STL模拟)
解题思路:把每一个运算式子单独输入,第一个输入的被默认为数组第一个数,然后如果输入的字符是+或者-的话就让数组+1,如果是*或者/的话数组不变,改变当前数组中的数。
#include<cstdio>
int main()
{
int i,n,m;double a[500];while(~scanf("%d",&n)){
char s,ch=getchar();if(n==0&&ch=='\n') break;int top=1;a[top]=n;while(~scanf("%c%d",&s,&m)){
if(s=='+') a[++top]=m;if(s=='-') a[++top]=-m;if(s=='*') a[top]=a[top]*m;if(s=='/') a[top]=a[top]/m;char ch=getchar();if(ch=='\n') break;}double sum=0.0;for(i=1;i<=top;i++) sum+=a[i];printf("%.2f\n",sum);}return 0;
}
#include<iostream>
#include<stack>
using namespace std;
stack<double>num;
stack<char>op;
double a,b;
char ch;
void count()
{
a=num.top();num.pop();b=num.top();num.pop();if(ch=='+'){
b=a+b;num.push(b);}else if(ch=='-'){
b=b-a;num.push(b);}else if(ch=='*'){
b=b*a;num.push(b);}else{
b=b/a;num.push(b);}op.pop();
}
int main()
{
string s;while(getline(cin,s)){
if(s=="0") break;for(int i=0;i<s.size();i++){
if(s[i]==' ') continue;else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){
while(!op.empty()){
ch=op.top();if((ch=='+'||ch=='-')&&(s[i]=='+'||s[i]=='-')||(ch=='*'||ch=='/'))count();//计算 else break;}op.push(s[i]);}else{
double c=0.0;while(s[i]>='0'&&s[i]<='9'){
c=c*10+s[i]-'0';i++;}num.push((c));i--;}}while(!op.empty()){
ch=op.top();count();//计算}printf("%.2lf\n",num.top());num.pop();} return 0;
}