A了,但是有问题!
查看原帖
A了,但是有问题!
846041
__xxy_free_ioi__楼主2024/12/12 18:08

这是0分代码:

全部TLE

#include <bits/stdc++.h>

using namespace std;

int num, f = 1, now = 1, l, r;
char c, x;

int main() {
    while (cin >> c) {
        if (c == '=') {
            r += f * now * num;
            f = 1;
            num = 0;
            now = -1;
            continue;
        }
        if (c == '+') {
            r += f * now * num;
            num = 0;
            f = 1;
            continue;
        }
        if (c == '-') {
            r += f * now * num;
            num = 0;
            f = -1;
            continue;
        }
        if ('a' <= c && c <= 'z') {
            x = c;
            if (num == 0) num = 1;
            l += f * now * num;
            num = 0;
            f = 0;
            continue;
        }
        while ('0' <= c && c <= '9') { // *问题在这里
            num = num * 10 + c - '0';
            cin >> c;
        } 
        cin.unget();// *
    }
    r += f * now * num;
    double ans = 1.0 * -r / l;
    if (ans == 0.000) ans = 0;
    printf("%c=%.3lf", x, ans);
    return 0;
}

但是非常神奇,只要我们小手一动,将我打了“*”标记的那一段改成:

if ('0' <= c && c <= '9') {
        num = num * 10 + c - '0';
}

他就会AC.

SO我有两个问题:

Q1 :为什么打“*”的这一段会死循环

Q2 :如果我要改打“*”的这一段要怎么改

2024/12/12 18:08
加载中...