当前位置: 代码迷 >> 综合 >> HDU - 1237 简单计算器(STL模拟)
  详细解决方案

HDU - 1237 简单计算器(STL模拟)

热度:59   发布时间:2023-11-25 09:13:36.0

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;
}