P1553 数字反转(升级版)求更好的方法
  • 板块题目总版
  • 楼主molly1212
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/23 23:43
  • 上次更新2024/8/24 10:45:46
查看原帖
P1553 数字反转(升级版)求更好的方法
556017
molly1212楼主2024/8/23 23:43

P1553 数字反转(升级版)
我的代码太冗杂了,哪位高手有更简洁的方法请指点一下?

#include <bits/stdc++.h>
using namespace std;
char s[100];
int pos1 = -1,pos2 = -1,pos3 = -1,a,b,lens;
void swap(char s[])
{
	int len = strlen(s);
	for (int i = 0;i*2 < len;i++)
	{
		char t = s[len-1-i];
		s[len-1-i] = s[i];
		s[i] = t;
	}
}
void doit(char s[])
{
	int len = strlen(s)-1;
	for (;len >= 0;len--)
	{
		if (s[len] == '0') s[len] = '\0';
		else break;
	}
	len = strlen(s);
	for (int i = 0;i*2 < len;i++)
	{
		char t = s[len-1-i];
		s[len-1-i] = s[i];
		s[i] = t;
	}
	if (len == 0) s[0] = '0';
}
bool pd(char s[])
{
	for (int i = 0;i < strlen(s);i++)
	{
		if (s[i] != '0') return 0;
	}
	return 1;
}
int main()
{
	scanf("%s",s);
	lens = strlen(s);
	for (int i = 0;i < lens;i++)
	{
		if (s[i] == '/') pos1 = i;
		if (s[i] == '.') pos2 = i;
		if (s[i] == '%') pos3 = i;
	}
	if (pos1 != -1)
	{
		s[pos1] = ' ';
		char a[105],b[105];
		sscanf(s,"%s%s",a,b);
		doit(a),doit(b);
		cout << a << '/' << b << endl;
	}
	else if (pos2 != -1)
	{
		s[pos2] = ' ';
		char a[105],c[105];
		sscanf(s,"%s %s",a,c);
		doit(a);
		if (pd(c)) cout << a << ".0" << endl;
		else
		{
			swap(c);
			for (int i = strlen(c)-1;i >= 0;i--)
			{
				if (c[i] == '0') c[i] = '\0';
				else break;
			}
			cout << a << '.' << c << endl;
		}
	}
	else if (pos3 != -1)
	{
		s[pos3] = '\0';
		doit(s);
		cout << s << '%' << endl;
	}
	else
	{
		doit(s);
		cout << s << endl;
	}
	return 0;
}
2024/8/23 23:43
加载中...