因为只需保留三位小数,像-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);