社区讨论

萌新25分求助!!

P1553数字反转(升级版)参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo2ak2vg
此快照首次捕获于
2023/10/23 10:41
2 年前
此快照最后确认于
2023/11/03 10:52
2 年前
查看原帖
请问为什么小数反转、分数反转、百分数反转什么也没有输出???是整个字符串都被删了吗?
代码:
CPP
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
	string s;
	cin >> s;
	if ((int)s.find('.') != -1)  // 小数反转
	{
		string a, b;
		a = s.substr(0, s.find('.'));  // 获取整数部分
		b = s.substr(s.find('.') + 1, s.length());  // 获取小数部分
		reverse(a.begin(), a.end());  // 反转
		reverse(b.begin(), b.end());  // 反转
		s = a + '.' + b;
		for (int i = 0; ; )  // 去掉前导0
		{
			if (s[i] == '0')
			{
				s.erase(i);  // 删除前导0
			}
			else break;
		}
		for (int i = s.length() - 1; i >= 0; i--)  // 去掉后导0
		{
			if (s[i] == '0')
			{
				s.erase(i);  // 删除后导0
			}
			else break;
		}
	}
	else if ((int)s.find('/') != -1)  // 分数反转
	{
		string a, b;
		a = s.substr(0, s.find('/'));  // 获取整数部分
		b = s.substr(s.find('/') + 1, s.length());  // 获取小数部分
		reverse(a.begin(), a.end());  // 反转
		reverse(b.begin(), b.end());  // 反转
		s = a + '/' + b;
		for (int i = 0; ; )  // 去掉分母前导0
		{
			if (s[i] == '0') s.erase(i);  // 去掉分母前导0
			else break;
		}
		for (int i = s.find('/') + 1; i < s.length(); i++)  // 去掉分子前导0
		{
			if (s[i] == '0') s.erase(i);  // 去掉分子前导0
			else break;
		}
		cout << s << endl;
	}
	else if ((int)s.find('%') != -1)  // 百分数反转
	{
		s.erase(s.find('%'));
		reverse(s.begin(), s.end());
		s = s + '%';
		for (int i = 0; ; )  // 去掉前导0
		{
			if (s[i] == '0') s.erase(i);  // 去掉前导0
			else break;
		}
		cout << s << endl;
	}
	else  // 整数反转
	{
		reverse(s.begin(), s.end());
		for (int i = 0; ; )  // 去掉前导0
		{
			if (s[i] == '0') s.erase(i);  // 去掉前导0
			else break;
		}
		cout << s << endl;
	}
	
	return 0;
}
大佬们麻烦帮忙看看

回复

4 条回复,欢迎继续交流。

正在加载回复...