#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里运行是正确的,但是到洛谷就是错的 不知道为什么,而且我觉得这个代码也没啥问题了?求助!!!