题目1019:简单计算器-------注意此题的输入中空格和字符和数字的关系;stack的c头文件;
AC:#include<stdio.h>
#include<stack>
using namespace std;
int main()
{ int a;
char b,c;
double d;
while(scanf("%d%c",&a,&c))
{
if (a==0 && c=='\n') break; //注意这里,输入0结束时,有一个换行符;因为要一个 //一个字符的判断,所以不得不注意\n
stack<double> num;
num.push(a);
while(scanf("%c %d%c",&b,&a,&c)!=EOF)//输入方式
{
if (b=='+') num.push(a);
else if (b=='-') num.push(-1.0*a);
else if (b=='*')
{
d=num.top()*a;
num.pop();
num.push(d);
}
else if (b=='/')
{
d=num.top()/a;
num.pop();
num.push(d);
}
if (c!=' ') break;
}
while(!num.empty())
{
if (num.size()==1)
{
printf("%.2lf\n",num.top());
num.pop();break;
}
double d1=num.top();
num.pop();
double d2=num.top();
num.pop();
num.push(d1+d2);
}
}
return 0;
}
后来又写了一次AC:
#include<stdio.h> #include<stack> using namespace std; int main() { int n1;char n2; while(scanf("%d%c",&n1,&n2)!=EOF) { if(n1==0 && n2=='\n') return 0; stack<double> s; s.push(n1); char c1,c2,c3; int a; double b; while(scanf("%c %d%c",&c1,&a,&c2)!=EOF) { if(c1=='+') s.push(a); else if(c1=='-') s.push(-1.0*a); else if(c1=='*') { b=s.top(); s.pop(); s.push(a*b); } else if(c1=='/') { b=s.top(); s.pop(); s.push(b/a); } if(c2!=' ') break; } //这样一来,stack里面的都是加数 double res=0; while(!s.empty()) { if(s.size()==1) { res=s.top(); printf("%.2lf\n",res); s.pop(); break; } double d=s.top(); s.pop(); double e=s.top(); s.pop(); s.push(d+e); } } return 0; }