题解中用==的特判0好像不严谨
查看原帖
题解中用==的特判0好像不严谨
319478
zhibuba楼主2020/7/27 23:49

因为只需保留三位小数,像-0.0001也该输出0.000,此外浮点数本身也有误差 不知为什么我用==就WA了(之前也能AC)

#include <cstdio>
#include <cstdlib>
#include <cctype>

using namespace std;

int main()
{
    char buf[100];
    gets(buf);
    int k = 0, b = 0, sign = 1;
    char var;
    char * p = buf;
    while (*p)
    {
        if (isalnum(*p) || *p == '-' || *p == '+')
        {
            char * q;
            int t = strtol(p, &q, 10);
            if (p == q)
            {
                var = (isalpha(*p) ? *p : *(p + 1));
                k += (*p++ == '-' ? -1 : 1) * sign;
            }
            else
            {
                if (isalpha(*q))
                    var = *q, k += t * sign, p = q + 1;
                else
                    b += t * sign, p = q;
            }
        }
        else if (*p == '=')
            sign = -1, p++;
        else
            p++;
    }
    double ans = - 1.0 * b / k;
    printf("%c=%.3f", var, ans ? ans : 0.0);
    return 0;
}

输出的那行改成这样才AC

printf("%c=%.3f", var, fabs(ans) >= 0.0005 ? ans : 0.0);
2020/7/27 23:49
加载中...