3171. 波兰表达式

Andrew-Malcom

include

#include<stack>
#include<cstring>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main()
{
    string s = "";
    vector<string>ssd;
    stack<double>stl;
    int i, j, k;
    while (cin >> s)
    {
        ssd.push_back(s);
        if (cin.get() == '\n') break;
    }
    reverse(ssd.begin(), ssd.end());
    for (i = 0; i < ssd.size(); i++) {
        if (ssd[i] == "+") {
            double s1 = stl.top();
            stl.pop();
            double s2 = stl.top();
            stl.pop();
            stl.push(s1 + s2);
        }
        else if (ssd[i] == "-") {
            double s1 = stl.top();
            stl.pop();
            double s2 = stl.top();
            stl.pop();
            stl.push(s1 - s2);
        }
        else if (ssd[i] == "*") {
            double s1 = stl.top();
            stl.pop();
            double s2 = stl.top();
            stl.pop();
            stl.push(s1 * s2);
        }
        else if (ssd[i] == "/") {
            double s1 = stl.top();
            stl.pop();
            double s2 = stl.top();
            stl.pop();
            stl.push(s1 / s2);
        }
        else {
            char str[10] = { '0' };
            for (j = 0; j < ssd[i].size(); j++) {
                str[j] = ssd[i][j];
            }
            stl.push(atof(str));
        }
    }
    printf("%.6lf",stl.top());
}
10175102262 LarsPendragon

说一个有关自增和自减的坑。我写的代码有一句曾经是这样的:

x+=(s[i--]-'0') * Pow10(j-i);

其中Pow10是一个算10的x次方的函数。我在本地运行的结果也是和下面的代码等同的:

x+=(s[i]-'0') * Pow10(j-i);
i--;

因为没有出问题,所以我也就忽略了这行代码。结果到OJ上,这行代码的运行结果是和这段代码等同的:

x+=(s[i]-'0') * Pow10(j-(i-1));
i--;

我才发现后置自减运算符在不同的环境下居然得到的结果是不同的……
当然,前置自增自减是没有这种问题的……

10185102131

样例中减号和5中间没有空格

kingno

我看成了负号,调试到心态爆炸

MiiroP

输出必须保留6位小数,然而题干里没说,只在输出样例里暗示了一下……

Echose

include

include

include

int main()
{
char s[200];
gets(s);
double a[200];
int count=0;
for (int i=strlen(s)-1;i>=0;i–)
{
if (s[i]>=‘0’&&s[i]<=‘9’&&s[i-1]==’ ‘)
a[count++]=s[i]-‘0’;
else if (s[i]>=‘0’&&s[i]<=‘9’&&s[i-1]!=’ ‘)
{
char b[10];
int count2=0,flag=0;
b[count2++]=s[i–];
while(s[i]!=’ ‘)
{
if(s[i]==’.’)flag=1;
b[count2++]=s[i–];
}
if(flag)
{
double x=0;
int y=0,j,k;
for (j=0;b[j]!=’.’;j++)
x=0.1x+(b[j]-‘0’)0.1;
for(k=count2-1;k>j;k–)
y=y10+b[k]-‘0’;
a[count++]=y+x;
}
else
{
int y=0;
for (int k=count2-1;k>=0;k–)
{
y=y
10+b[k]-‘0’;
}
a[count++]=y;
}
}
else if (s[i]==’’)
{
a[count-2]=a[count-1]
a[count-2];
count–;
}
else if (s[i]==’/’)
{
a[count-2]=a[count-1]/a[count-2];
count–;
}
else if (s[i]==’+’)
{
a[count-2]=a[count-1]+a[count-2];
count–;
}
else if (s[i]==’-‘)
{
a[count-2]=a[count-1]-a[count-2];
count–;
}
}
printf(“%.6f”,a[0]);
return 0;
}

你当前正在回复 博客/题目
存在问题!