求助
查看原帖
求助
1013950
__youzimo2014__楼主2024/4/24 21:08

我特判了 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

2024/4/24 21:08
加载中...