关于回文日期的JAVA解答

该程序是一个用Java编写的算法,用于寻找2020年后的下一个回文日期。它首先检查输入日期是否符合回文结构,然后验证日期的合法性,确保是实际可存在的日期。通过不断加1到日期上,直到找到下一个同时满足回文和有效日期条件的日期。
摘要由CSDN通过智能技术生成

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

求下一个回文日期?

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int flag1 = 0;
        int flag2 = 0;
//        System.out.println(check_ab(n));
//        System.out.println(check_huiwen(n));
//        System.out.println(check_date(n));测试
        n++;
        while(true) {
            if(check_date(n)) {
                if(flag1==0 && check_huiwen(n)) {
                    System.out.println(n);
                    flag1 = 1;
                    
                }
                if(flag2==0 && check_ab(n)) {
                    System.out.println(n);
                    flag2 = 1;
                }
            }
            if(flag1==1 && flag2==1) {
                return;
            }
            n++;
        }
        
    }

private static boolean check_ab(int n) {
    //ABABBABA
    //01234567
    int a[] = new int[8];
    int i = 0;
    while(n > 0) {
        a[i++] = n % 10;
        n = n / 10;
    }
    if(a[0]==a[2]&&a[0]==a[5]&&a[0]==a[7] && a[1]==a[3]&&a[1]==a[4]&&a[1]==a[6]) {
        return true;
    }
    return false;
    }

private static boolean check_huiwen(int n) {
    //20200202
    //01234567
    int a[] = new int[8];
    int i = 0;
    while(n > 0) {//通过这个循环,把n中的每一个数取出来
        a[i++] = n%10;
        n = n / 10;
    }
    if(a[0]==a[7] && a[1]==a[6] && a[2]==a[5] && a[3]==a[4]) {
        return true;
    }
    
        return false;
    }

static int[] days = {0,31,28,31,30,31,30,31,31,30,31,30,31};
private static boolean check_date(int n) {
    // 检查是否是合法日期
    int year=n/10000;
    int month = n/100%100;
    int day = n%100;
    //判断月份是否合法
    if (month>12 || month<1) {
        return false;
    }
    //判断闰年
     if(year%400==0 || (year%4==0 && year%100!=0)) {
         days[2]=29;
     }else {
         days[2]=28;
     }
    //判断天数是否合法
    if (day > days[month] || day < 1) {
        return false;
    }
    return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值