这题的数据怎么回事(
查看原帖
这题的数据怎么回事(
759881
ylch楼主2024/7/11 10:42

rt,这是我的代码

#include <bits/stdc++.h>
using namespace std;
signed main()
{
    string s; getline(cin, s); // 有空格,用getline输入
    int p1 = s.find_first_of("+-*/"); // 找到运算符的位置
    int p2 = s.find_first_of("=", p1); // 找到等号的位置

    // 提取运算的数
    string a1 = s.substr(0, p1);
    string b1 = s.substr(p1 + 1, p2 - p1 - 1);
    string c1 = s.substr(p2 + 1);

    // 去除空格
    string a2, b2, c2;
    for(auto u : a1) if(u != ' ') a2.push_back(u);
    for(auto u : b1) if(u != ' ') b2.push_back(u);
    for(auto u : c1) if(u != ' ') c2.push_back(u);

    // 转换为数字
    int a = -1, b = -1, c = -1; // 题目说输入的数不会是负数,所以可以这样初始化
    if(a2[0] != '?') a = stoi(a2);
    if(b2[0] != '?') b = stoi(b2);
    if(c2[0] != '?') c = stoi(c2);
    //* 这里必须这样写才能过,可能是虽然题面说输入只有数字、运算符、空格,但实际上掺杂了一些奇奇怪怪的字符(也可能是\r的原因?不知道……)

    // 开始运算————解方程
    if(a == -1){
        if(s[p1] == '+'){ // x+b=c -> x=c-b
            printf("%.2lf", 1.0*c - b);
        }
        else if(s[p1] == '-'){ // x-b=c -> x=b+c
            printf("%.2lf", 1.0*b + c);
        }
        else if(s[p1] == '*'){ // x*b=c -> x=c/b
            printf("%.2lf", 1.0*c / b);
        }
        else if(s[p1] == '/'){ // x/b=c -> x=b*c
            printf("%.2lf", 1.0*b * c);
        }
    }
    else if(b == -1){
        if(s[p1] == '+'){ // a+x=c -> x=c-a
            printf("%.2lf", 1.0*c - a);
        }
        else if(s[p1] == '-'){ // a-x=c -> -x=c-a -> x=a-c
            printf("%.2lf", 1.0*a - c);
        }
        else if(s[p1] == '*'){ // a*x=c -> x=c/a
            printf("%.2lf", 1.0*c / a);
        }
        else if(s[p1] == '/'){ //! a/x=c -> x=a/c 易错
            printf("%.2lf", 1.0*a / c);
        }
    }
    else if(c == -1){
        if(s[p1] == '+'){ // a+b=x
            printf("%.2lf", 1.0*a + b);
        }
        else if(s[p1] == '-'){ // a-b=x
            printf("%.2lf", 1.0*a - b);
        }
        else if(s[p1] == '*'){ // a*b=x
            printf("%.2lf", 1.0*a * b);
        }
        else if(s[p1] == '/'){ // a/b=x
            printf("%.2lf", 1.0*a / b);
        }
    }
//    printf("%.2lf", 1.0*);
    return 0;
}

在判断是不是?的时候,必须要如上的写法,如果写成类似a2!="?"的形式就会RE,求大佬帮忙解释一下

2024/7/11 10:42
加载中...