You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.2 KiB

#include<bits/stdc++.h>
using namespace std;
/**
0.000009->0.9
0.900000->0.000009
00000.00000->0.0
0/1230000->0/321不是0也不是0/0000321
000000000->0
1.00 -->1.0
0% --->0%
*/
//是哪种?
int getType(string a) {
if (a.find('.') != a.npos) return 2;
if (a.find('/') != a.npos) return 3;
if (a.find('%') != a.npos) return 4;
return 1;//整数
}
int main() {
string a;
int i, p, end;
cin >> a;
if (a == "0") {
printf("%d", 0);
return 0;
}
switch (getType(a)) {
case 1:
//去掉前导0
i = a.size() - 1;
while (a[i] == '0')i--;
//输出
if (i == -1) cout << 0;
else
while (i >= 0) cout << a[i], i--;
break;
case 2:
p = a.find('.');
//输出整数部分
i = p - 1;
while (a[i] == '0')i--;
//如果只有一个0
if (i == -1) cout << 0;
else while (i >= 0) cout << a[i], i--;
//输出.
cout << ".";
//小数部分开始
i = a.size() - 1;
//跳过后导0
end = p + 1;
while (a[end] == '0')end++;//去除前导0
if (i < end) cout << 0;
else
while (i >= end) cout << a[i], i--;
break;
case 3:
p = a.find('/');
//分子
i = p - 1;
while (a[i] == '0')i--;
if (i == -1) cout << 0;
else while (i >= 0) cout << a[i], i--;
//除号
cout << "/";
//分母
i = a.size() - 1;
//跳过前导0
while (a[i] == '0')i--;
while (i > p) cout << a[i], i--;
break;
case 4:
//去掉前导0
i = a.size() - 2;//注意这里最后一位是%号
while (a[i] == '0')i--;
if (i == -1) cout << 0;
else while (i >= 0) cout << a[i], i--;
//输出%
cout << "%";
break;
}
return 0;
}