我特判了 ans == -0.0,可是好像没什么用,本地和洛谷 IDE 都还是输出 -0.000:
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int main(int argc, const char * argv[]) {
// insert code here...
// 设未知数为 x
// ax = b
/// 未知数的系数
int a = 0;
/// 常数项
int b = 0;
string s;
cin >> s;
char ch = 0; // 未知数
int sum = 0;
bool left = true; // i 指针在左边
bool negative = false; // 负数
for (int i = 0; i < s.length(); i++) { // 统一系数,把 -x, x 这些没有系数的变量变成有系数
if ('a' <= s[i] && s[i] <= 'z') {
if (i == 0 || !('0' <= s[i-1] && s[i-1] <= '9'))
s.insert(i, 1, '1');
}
}
for (int i = 0; i < s.length(); i++) {
// fix sign
if (s[i] == '+' || s[i] == '-') {
if (s[i] == '-') {
negative = !negative;
}
}
// fix left or right
if (s[i] == '=') {
left = false;
}
// read number
if ('0' <= s[i] && s[i] <= '9') {
sum *= 10; sum += s[i] - '0';
if (i < s.length()-1 && ('0' <= s[i+1] && s[i+1] <= '9')) {
continue;
}
}
if (sum != 0) {
if (negative) {
sum = -sum;
}
if (i < s.length()-1 && 'a' <= s[i+1] && s[i+1] <= 'z') {
if (left)
a += sum;
else
a -= sum;
ch = s[i+1];
} else {
if (left)
b -= sum;
else
b += sum;
}
sum = 0;
negative = false;
}
}
// printf("%d,%d", a, b);
double ans = (double)b / a;
if (ans == -0.000) ans = 0.0;
printf("%c=%.3lf", ch, (double)b / a);
return 0;
}
另外我把:
if (ans == -0.000) ans = 0.0;
改成了
if (fabs(ans - (-0.000)) < 1e-6) ans = 0.0;
还是输出 0.000