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;
}