回文日期(Java)蓝桥杯

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

import java.util.Scanner;

public class test03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        int n = sc.nextInt();
        //定义一个data进行记录日期
        int date = n;
        //有两个要求,使用做两个判断
        boolean flag1 = true, flag2 = true;
        while (flag1 || flag2) {
            //把data填进去,如果是n这里日期不会递增,使用需要额外定义一个data
            date = DateRun(date);
            //题目要求是先输出回文日期,但是只要一个回文日期就可以,
            //所以要在前加入flag判断是否已经输出,输出过则跳过
            //反转字符串比较
            if (flag1 == true && sb.append(date).reverse().toString().equals(String.valueOf(date))) {
                //进行sb清空,因为sb会自动添加在字符串末尾
                //不管字符串是不是都要进行清空
                sb.setLength(0);
                System.out.println(date);
                flag1 = false;
            } else sb.setLength(0);
            //首先判断前面是不是ABAB型,再反转后面四位字符串与前面进行比较
            if (flag1 == false && String.valueOf(date).substring(0, 2).equals(String.valueOf(date).substring(2, 4))
                    && String.valueOf(date).substring(0, 4).equals
                    (sb.delete(0, sb.length()).append(String.valueOf(date).substring(4)).reverse().toString())) {
                System.out.println(date);
                flag2 = false;
            } else sb.setLength(0);
        }

        sc.close();
    }

    //对日期进行合法判断和自增
    public static int DateRun(int date) {
        int year = date / 10000, month = (date / 100) % 100, day = date % 100;
        day++;
        int p = 31;
        if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
            p = 29;
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            p = 30;
        } else if (month == 2) {
            p = 28;
        }
        if (day > p) {
            day = 1;
            month++;
            if (month > 12) {
                month = 1;
                year++;
            }
        }
        return year * 10000 + month * 100 + day;
    }
}
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值