P1553 数字反转(升级版)

题目传送门

#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);
        exit(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++;
            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;
}
posted @   糖豆爸爸  阅读(115)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2018-11-18 ubuntu中vim下按上下左右键时输入A、B、C、D
2017-11-18 利用SQL SERVER对比两张表的数据一致性
Live2D
点击右上角即可分享
微信分享提示