思路: 没想到什么好办法,一步一步来。整体就是反转,删除前导/后导0,反转,删除前导/后导0。
第一次AC没过去,原因是没考虑到分数的分母前导0的情况,比如1234567890/1234567890这个样例,结果输出应该是987654321/987654321才对。所以如果是分数的话,相较于小数,需要多考虑这种情况。
代码看起来挺多,是因为重复的代码挺多的。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {string s;cin >> s;if (s.find(".")!=string::npos || s.find("/")!=string::npos) {int x = 0;if (s.find(".")!=string::npos) {x = s.find(".");}else {x = s.find("/");}//0到x-1是一段 然后x+1到s.length()-1是一段reverse(s.begin(),s.begin() + x);int index = 0;while (x - index > 1 && s[index] == '0') {index++;}reverse(s.begin() + x + 1, s.end());int index2 = s.length() - 1;while (index2 - x > 1 && s[index2] == '0') {index2--;}int index3 = x + 1;if (s.find("/") != string::npos) {while (index2 - index3 > 0 && s[index3] == '0') {index3++;}}if (s.find(".")!=string::npos) {cout << s.substr(index, x - index) + "." + s.substr(x + 1, index2 - x) << endl;}else {cout << s.substr(index, x - index) + "/" + s.substr(index3,index2 - index3 + 1) << endl;}}else if (s.find("%")!=string::npos) {int x = s.find("%");reverse(s.begin(), s.begin() + x);int index = 0;while (x - index > 1 && s[index] == '0') {index++;}cout << s.substr(index) << endl;}else {reverse(s.begin(), s.end());int index = 0;while (s.length() - index > 1 && s[index] == '0') {index++;}cout << s.substr(index) << endl;}return 0;
}