P1553 数字反转(升级版)(JAVA)

这篇具有很好参考价值的文章主要介绍了P1553 数字反转(升级版)(JAVA)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目背景

以下为原题面,仅供参考:

给定一个数,请将该数各个位上数字反转得到一个新数。

这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数只改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为 0 0 0(除非小数部分除了 0 0 0 没有别的数,那么只保留1个 0 0 0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为 0 0 0),本次没有负数。

题目描述

给定一个数,请将该数各个位上数字反转得到一个新数。

这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。

  • 整数反转是将所有数位对调。

  • 小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。

  • 分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母。

  • 百分数的分子一定是整数,百分数只改变数字部分。

输入格式

一个实数 s s s

输出格式

一个实数,即 s s s 的反转数

样例 #1

样例输入 #1

5087462

样例输出 #1

2647805

样例 #2

样例输入 #2

600.084

样例输出 #2

6.48

样例 #3

样例输入 #3

700/27

样例输出 #3

7/72

样例 #4

样例输入 #4

8670%

样例输出 #4

768%

提示

【数据范围】

  • 对于 25 % 25\% 25% 的数据, s s s 是整数,不大于 20 20 20 位;
  • 对于 25 % 25\% 25% 的数据, s s s 是小数,整数部分和小数部分均不大于 10 10 10 位;
  • 对于 25 % 25\% 25% 的数据, s s s 是分数,分子和分母均不大于 10 10 10 位;
  • 对于 25 % 25\% 25% 的数据, s s s 是百分数,分子不大于 19 19 19 位。

【数据保证】

  • 对于整数翻转而言,整数原数和整数新数满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数和原来的数字的最高位数字不应为零。

  • 对于小数翻转而言,其小数点前面部分同上,小数点后面部分的形式,保证满足小数的常见形式,也就是末尾没有多余的 0 0 0(小数部分除了 0 0 0 没有别的数,那么只保留 1 1 1 0 0 0。若反转之后末尾数字出现 0 0 0,请省略多余的 0 0 0

  • 对于分数翻转而言,分数不约分,分子和分母都不是小数。输入的分母不为 0 0 0。与整数翻转相关规定见上。

  • 对于百分数翻转而言,见与整数翻转相关内容。

数据不存在负数。

1.题目分析

输入整数,小数,分数,百分数,
整数直接反转,反转后前置有零的要去除。
小数单独反转整数和小数部分,反转后小数部分要去后置零,整数部分要去前置零。
分数单独反转分子分母部分,分子分母都要去除前置零。
百分数符号位不动,反转整数部分,反转后去除前置零。

值得注意的是,为零的情况要考虑清楚,整数可以为0,小数可以为0.0,但分数只能是分子为0,百分数也可以为0%。

2.题目思路

这里使用的是JAVA,输入字符串,判断包含的符号位:

如果包含小数点,将字符以小数点为分隔符切割成一个字符串数组,去除小数部分前置零,去除整数部分后置零,将字符串数组内的字符串转成StringBuilder类型,调用反转函数,判断整数或者小数部分只有零的情况,打印即可。

如果包含的是分数符号,一样切割成数组,去除分子分母部分后置零,使用反转函数,需要判断分子为零的情况。

如果包含的是百分号,切割成数组,去除后导零,数字反转后,判断百分数为零的情况。

其他就是整数,直接去除后导零,反转打印即可,判断为零的情况。文章来源地址https://www.toymoban.com/news/detail-647394.html

3.代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        if (str.contains(".")) {
            String[] xs = str.split("\\.");
            //去除小数部分前置零
            xs[1] = xs[1].replaceFirst("^0+", "");
            //去除整数部分后置零
            xs[0] = xs[0].replaceAll("0+$", "");
            StringBuilder sb1 = new StringBuilder(xs[0]);
            StringBuilder sb2 = new StringBuilder(xs[1]);
            //数字反转
            sb1.reverse();
            sb2.reverse();
            //整数或者小数部分只有零的情况
            if (sb2.length() == 0) {
                sb2.append("0");
            }
            if (sb1.length() == 0) {
                sb1.append("0");
            }
            System.out.println(sb1 + "." + sb2);
        } else if (str.contains("/")) {
            String[] fs = str.split("/");
            //去除分子分母部分后置零
            fs[0] = fs[0].replaceAll("0+$", "");
            fs[1] = fs[1].replaceAll("0+$", "");
            StringBuilder sb1 = new StringBuilder(fs[0]);
            StringBuilder sb2 = new StringBuilder(fs[1]);
            //数字反转
            sb1.reverse();
            sb2.reverse();
            //分子为零的情况
            if (sb1.length() == 0) {
                sb1.append("0");
            }
            System.out.println(sb1 + "/" + sb2);

        } else if (str.contains("%")) {
            String[] bfs = str.split("%");
            bfs[0] = bfs[0].replaceAll("0+$", "");
            StringBuilder sb = new StringBuilder(bfs[0]);
            sb.reverse();
            //百分数为零的情况
            if (sb.length() == 0) {
                sb.append("0");
            }
            System.out.println(sb + "%");

        } else {
            if (str.equals("0")) {
                System.out.println("0");
            }
            StringBuilder sb = new StringBuilder(str);
            sb.reverse();
            String sbString = sb.toString();
            String output = sbString.replaceFirst("^0+", "");
            System.out.println(output);
        }
    }
}

到了这里,关于P1553 数字反转(升级版)(JAVA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单身狗问题(初级)兼(升级版)

    所属专栏:经典算法题❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ 🚀 关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

    2024年02月16日
    浏览(43)
  • 爬虫练习-12306自动购票升级版

    hello兄弟们,偷懒归来了。别问为啥这么久没更,问就是失踪了 最近一直在学习Django以及爬虫进阶之类的知识,加上快期末了,一直没有想起来自己还有一个账号没有更新,sorry啦 言归正传,今天抽空把前面的文章升级了一下。这里先把整理好的代码提前放给大家 代码放上,

    2024年02月06日
    浏览(63)
  • 云计算中网络基础知识(升级版)

    网络相连:电脑-交换机-电脑 需要配置两个地址:(1) IP地址、子网掩码、网关(网络的出口)。 (2) MAC 地址(物理地址)不需要配置,电脑网卡自带的(天生就有) 电脑必须要配置IP地址、子网掩码 才可以通信、网关可以不用(前提是两台电脑处在同一个网段下) 网关

    2023年04月27日
    浏览(44)
  • EasyExcel复杂表头导出(一对多)升级版

            在之前写的 EasyExcel复杂表头导出(一对多)的博客的结尾,受限于当时的能力和精力,留下一些问题及展望。现在写下此博客,目的就是解决之前遗留的问题。         背景介绍,见上述链接指向的博客,这里主要通过 自定义拦截器 的形式来完美解决。 对于图

    2024年02月06日
    浏览(62)
  • 【Unity+MySQL】实现注册登录系统(升级版)

    接着 上篇文章所谈到的系统缺陷,这篇文章进行升级解决。 问题 :注册界面与登录界面是同一个界面,导致用户输入用户密码进行注册后,即可点击登录。 解决 :在同一个场景中分别创建注册界面和登录界面,使用SetActive控制注册/登录成功后UI的显示与隐藏。 整体的UI框

    2024年02月09日
    浏览(49)
  • Python数据挖掘 | 升级版自动查核酸

    📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看 📘相关专栏C语言初阶、C语言进阶系列、恒川等,大家有兴趣的可以看一看 📙Python零基础入门系列,J

    2024年02月08日
    浏览(46)
  • 洛谷-P1478-陶陶摘苹果(升级版)(贪心)

    又是一年秋季时,陶陶家的苹果树结了 n n n 个果子。陶陶又跑去摘苹果,这次他有一个 a a a 公分的椅子。当他手够不着时,他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的是:陶陶之前搬凳子,力气只剩下 s s s 了。当然,每次摘苹果时都要用一定的力气。陶陶

    2024年02月21日
    浏览(43)
  • Python-敲木鱼升级版(真手动版敲木鱼)

    演示效果 需要安装的第三方库: pip install pygame # 加载音乐 pip install pillow # 加载图片 pip install mediapipe # 判断手势的模型 pip install opencv # 模型要用来处理图形 建议有独显和摄像头的可以尝试! 想着升级一下玩法,只有真敲才能真积徳!于是找了个能判断手势的模型。 源码(

    2024年02月05日
    浏览(42)
  • 无门槛访问ChatGPT升级版-数据指北AI

    大家好,我是脚丫先生 (o^^o) 给小伙伴们介绍ChatGPT升级版不需要任何门槛,不需要单独搞账号,只要 邮箱 登录的方式,即可访问平台,以用户体验为首要,让所有人都能无门槛的使用目前市面上最强大的AI智能聊天,以及市面上最优秀的AI绘画等等功能,接下来给大家介绍下

    2024年02月10日
    浏览(46)
  • SpringCloud是SpringBoot 的升级版吗?有什么区别?

    目录 一、什么是SpringBoot 二、什么是SpringCloud 三、SpringCloud是SpringBoot 的升级版吗 四、SpringCloud和SpringBoot 有什么区别   Spring Boot是一种用于快速构建基于Spring框架的Java应用程序的开发框架。它简化了Spring应用程序的配置和部署过程,提供了一种便捷的开发方式,同时也提供了

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包