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