本地运行正确的答案,洛谷就报错,求助!
查看原帖
本地运行正确的答案,洛谷就报错,求助!
994007
Drewjin楼主2023/8/28 23:55
#include <bits/stdc++.h>
using namespace std;

void EraseZeros(string &s) {
    if(s == "0") return;
    
    if(s[0] == '0') {
        s[0] = '\0';
        for(int i = 1; i < s.size(); i++) {
            if(s[i] == '0') {
                s[i] = '\0';
            } else if(s[i] != '0') {
                return;
            }
        }
    } else return;
}

void IntRev(string s) {
    // cout << s << endl;
    reverse(s.begin(), s.end());
    // cout << s << endl;
    EraseZeros(s);
    cout << s;
}

void DoubleRev(string s) {
    int index = 0;
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == '.') {
            index = i;
            break;
        } else continue;
    }

    string sp1(index, ' '), sp2(s.size() - index - 1, ' '); // 一定提前赋值
    for(int i = 0; i < index; i++) {
        sp1[i] = s[i];
    }
    for(int i = 0; i < s.size() - index - 1; i++) {
        sp2[i] = s[i + index + 1]; 
    }

    EraseZeros(sp1);
    EraseZeros(sp2);

    reverse(sp1.begin(), sp1.end());
    reverse(sp2.begin(), sp2.end());

    EraseZeros(sp1);
    EraseZeros(sp2);

    cout << sp1 << "." << sp2;
}

void FractionRev(string s) {
    int index = 0;
    for(int i = 0; i < s.size(); i++) {
        if(s[i] == '/') {
            index = i;
            break;
        } else continue;
    }

    string sp1(index, ' '), sp2(s.size() - index - 1, ' '); // 一定提前赋值
    for(int i = 0; i < index; i++) {
        sp1[i] = s[i];
    }
    for(int i = 0; i < s.size() - index - 1; i++) {
        sp2[i] = s[i + index + 1]; 
    }

    // cout << sp1 << " " << sp2 << endl;

    EraseZeros(sp1);
    EraseZeros(sp2);

    // cout << sp1 << " " << sp2 << endl;

    reverse(sp1.begin(), sp1.end());
    reverse(sp2.begin(), sp2.end());

    // cout << sp1 << " " << sp2 << endl;

    EraseZeros(sp1);
    EraseZeros(sp2);

    cout << sp1 << "/" << sp2;
}

void PercentRev(string s) {
    string tmp(s.size() - 1, ' ');
    for(int i = 0; i < s.size() - 1; i++) {
        tmp[i] = s[i];
    }
    EraseZeros(tmp);
    reverse(tmp.begin(), tmp.end());
    EraseZeros(tmp);
    cout << tmp << "%";
}

int main() {
    string num;
    cin >> num;
    
    int type = 1;
    for(int i = 0; i < num.size(); i++) {
        if(num[i] == '.') {
            type = 2;
            break;
        } else if(num[i] == '/') {
            type = 3;
            break;
        } else if(num[i] == '%') {
            type = 4;
            break;
        } else continue;
    }

    switch (type) {
        case 1: {
            IntRev(num);
            break;
        }
        case 2: {
            DoubleRev(num);
            break;
        }
        case 3: {
            FractionRev(num);
            break;
        }
        case 4: {
            PercentRev(num);
            break;
        }
    }
}

这里检测出的错误点,保存in/out出第二个, 答案是 50007008000000 80070005 我在vscode里运行是正确的,但是到洛谷就是错的 不知道为什么,而且我觉得这个代码也没啥问题了?求助!!!

2023/8/28 23:55
加载中...