95分,求第20个测试点数据
查看原帖
95分,求第20个测试点数据
1354168
czq__楼主2024/7/22 07:56
 #include<bits/stdc++.h>
using namespace std;
void unside(string& s, int l, int r) {
	for (int i = l; i < r + l >> 1; i++)
	{
		char t = s[i];
		s[i] = s[r - i - 1 + l];
		s[r - i - 1 + l] = t;
	}
}
//去0
int  is0(string s, int l , int r) {
	for (int i = l; i < r; i++)
		if (s[i] != '0') return i;
	return r - 1;
}
//去小数0
int isx(string s, int l, int r) {
	for (int i = r - 1; i >= l; i--)
		if (s[i] != '0') return i;
	return l;
}
int main() {
	string s;
	cin >> s;
	int t = 1,n;
	if (s[s.size() - 1] == '%') t = 4;
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == '.') { t = 2; n = i; break; }
		if (s[i] == '/') { t = 3; n = i; break; }
	}
	switch (t) {
	case 1:unside(s, 0, s.size());
		for (int i = is0(s, 0, s.size()); i < s.size(); i++) cout << s[i];  break;
	case 2:unside(s, 0, n); for (int i = is0(s, 0, n); i < n; i++) cout << s[i]; 
		cout << s[n]; 
		unside(s, n + 1, s.size()); for (int i =n+1; i <=isx(s, n + 1, s.size()); i++) cout << s[i]; break;
	case 3:unside(s, 0, n); for (int i = is0(s, 0, n); i < n; i++) cout << s[i]; 
		cout << s[n];
		unside(s, n + 1, s.size());  for (int i = is0(s, n+1, s.size()); i < s.size(); i++) cout << s[i];  break;
	case 4:unside(s, 0, s.size() - 1); for (int i = is0(s, 0, s.size()); i < s.size(); i++) cout << s[i];  break;
	}
} 
2024/7/22 07:56
加载中...