95分求助
查看原帖
95分求助
1021623
AVLw楼主2023/9/6 00:08
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<string>
#include<cctype>
#include<algorithm>
using namespace std;
void deleteFrontZero(string& s) {
	auto it = s.begin();
	while (*it== '0') {
		s.erase(it);
	}
}
void deleteLastZero(string& s) {
	for (int i = s.size() - 1; i >= 0; i--) {
		if (s[i] == '0')
			s.pop_back();
		else
			break;
	}
}
int main() {
	string s; size_t pos;
	getline(cin, s);
		if (s == "0") {
			cout << '0';
			return 0;
		}
		
		if (s == "0%") {
			cout << "0%";
			return 0;
		}
		if (s == "0.0") {
			cout << "0.0";
			return 0;
		}
		if (s == "0/0") {
			cout << "0/0";
			return 0;
		}
		
	

	if (s.find('.')!=string::npos) {
		pos = s.find('.');
		reverse(s.begin(),s.begin()+pos);
		reverse(s.begin() + pos+1,s.end());
		deleteFrontZero(s);
		deleteLastZero(s);
		pos = s.find('.');
		if (s[pos] == '.' && s[pos+1] == '\0')
			s += '0';
	}
	else if (s.find('%')!=string::npos) {
		pos = s.find('%');
		reverse(s.begin(),s.begin()+pos);
		deleteFrontZero(s);
	}
	else if (s.find('/')!=string::npos) {
		
		pos = s.find('/');
		reverse(s.begin(), s.begin() + pos);
		reverse(s.begin() + pos + 1, s.end());
		deleteFrontZero(s);
		deleteLastZero(s);
		pos = s.find('/');
		if (pos == 0) {
			string temp = '0' + s;
			s = temp;
		}
		if (s[pos + 1] == '0') {
			size_t begin = pos + 1;
			while (s[begin] == '0')
				begin++;
			s.erase(pos + 1, begin - (pos + 1));
		}
		
	}
	else {
		reverse(s.begin(), s.end());
		deleteFrontZero(s);
	}
	
	for (auto e : s) {
		cout << e;
	}
	


	return 0;
}

我原本70分改到现在 每次哪里有问题就加一个if 一次加五分搞到现在 95分 没招了

2023/9/6 00:08
加载中...