来看各种数值的反转吧(洛谷P1553题题解,Java语言描述)

题目要求

P1553题目链接

在这里插入图片描述
在这里插入图片描述

分析

建议分别识别不同类型,进行处理。

整数倒置、排0。
分数只是分隔开分母和分子,分别按照整数来处理。
小数注意整数部分按照整数处理,小数部分要反过来处理。
百分数在排除%以后按照整数处理。

有一些问题是在用regex时,".“不能表示小数点,应该用”\."才行,这个要注意,很重要。。我第一次提交就是因为这个爆的异常。

还有就是整数部分和小数部分处理方式不一致,这个一定要注意,否则会WA掉。

具体的实现看代码吧!

第一次提交——RE

在这里插入图片描述

获取了测试数据2:
in
0.00000
out
0.0

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {

    private static String reverse1(String num) {
        char[] chars = new StringBuilder(num).reverse().toString().toCharArray();
        int count = 0;
        while (count < chars.length && chars[count] == '0') {
            count++;
        }
        if (count >= chars.length) {
            return "0";
        }
        return new String(chars).substring(count);
    }

    private static String reverse2(String num) {
        char[] chars = new StringBuilder(num).reverse().toString().toCharArray();
        int count = chars.length-1;
        while (count >= 0 && chars[count] == '0') {
            count--;
        }
        if (count < 0) {
            return "0";
        }
        return new String(chars).substring(0, count+1);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String num = scanner.nextLine();
        scanner.close();
        if (num.contains(".")) {
            //小数
            String[] nums = num.split("\\.");
            System.out.println(reverse1(nums[0]) + "." + reverse2(nums[1]));
        } else if (num.contains("/")) {
            //分数
            String[] nums = num.split("/");
            System.out.println(reverse1(nums[0]) + "/" + reverse1(nums[1]));
        } else if (num.endsWith("%")) {
            //百分数
            System.out.println(reverse1(num.substring(0, num.length()-1)) + "%");
        } else {
            //整数
            System.out.println(reverse1(num));
        }
    }
}

在这里插入图片描述

发布了351 篇原创文章 · 获赞 610 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104061377
今日推荐