2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。
有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。
也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。
给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。
代码及思路如下:
1 import java.time.LocalDate; 2 import java.time.format.DateTimeFormatter; 3 import java.util.*; 4 5 public class test { 6 7 /*实现三个要求 8 * 1——判断是否为闰年(四年一闰百年不闰,每四百年再一闰) 9 * 2——判断是否为回文数 10 * 3——判断是否为ABAB 11 * */ 12 13 //1闰年输出true ,非闰年输出false 14 static boolean isRun(int n) { 15 if (n%4== 0&& n%100!=0 || n%400==0) { 16 return true;} 17 else { 18 return false; 19 } 20 } 21 22 //2判断是否回文 23 static boolean isCirchar(int y) { 24 int d1 = y%10; 25 int d2 = y/10%10; 26 int d3 = y/100%10; 27 int d4 = y/1000%10; 28 int rear =d1*1000 + d2*100 + d3*10 + d4; 29 int pre = y/10000; 30 if (pre == rear) { 31 return true; 32 }else { 33 return false; 34 } 35 36 } 37 38 //3判断是否为ABAB 39 static boolean isRechar(int y) { 40 int pre = y/1000000; 41 int rear = y/10000%100; 42 if (pre == rear) { 43 return true; 44 }else { 45 return false; 46 } 47 } 48 49 //4取月 50 static int take_month(int y) { 51 int rear = y/100%10; 52 int pre = y/1000%10; 53 return pre*10+rear; 54 } 55 56 //5取日 57 static int take_day(int y) { 58 int rear = y%10; 59 int pre = y/10%10; 60 return pre*10+rear; 61 } 62 63 64 /*优化思路: 65 * 判断每月天数 66 * 按月 67 * 31天:一三五七八十腊 68 * 30天:四六九十一 69 * 二月按年 70 * 28天:闰年二月 71 * 29天:平年二月 72 * */ 73 74 public static void main(String[] args) { 75 Scanner scanner = new Scanner(System.in); 76 int y = scanner.nextInt(); 77 //判断是否是回文日期 78 for (int i = y+1; i < 99991231; i++) { 79 if (take_month(i)<=12 && take_day(i)<=31 && take_month(i)!=0 && take_day(i)!=0 && isCirchar(i)==true) { 80 //小月 81 if (take_month(i)==4 || take_month(i)==6 || take_month(i)==9 || take_month(i)==11) { 82 if (i%100<=30) { 83 System.out.println(i); 84 break; 85 } 86 }else if (take_month(i) != 2) {//大月 87 if (i%100<=31) { 88 System.out.println(i); 89 break; 90 } 91 }else { 92 if (isRun(i)==true) { 93 if (i%100<=29) { 94 System.out.println(i); 95 break; 96 } 97 }else { 98 if (i%100<=28) { 99 System.out.println(i); 100 break; 101 } 102 } 103 } 104 105 106 } 107 } 108 109 //判断是否是回文日期且为ABAB型 110 for (int l = y+1; l < 99991231; l++) { 111 if (take_month(l)<=12 && take_day(l)<=31 && take_month(l)!=0 && take_day(l)!=0 && isCirchar(l)==true && isRechar(l)==true) { 112 //小月 113 if (take_month(l)==4 || take_month(l)==6 || take_month(l)==9 || take_month(l)==11) { 114 if (l%100<=30) { 115 System.out.println(l); 116 break; 117 } 118 }else if (take_month(l) != 2) {//大月 119 if (l%100<=31) { 120 System.out.println(l); 121 break; 122 } 123 }else { 124 if (isRun(l)==true) { 125 if (l%100<=29) { 126 System.out.println(l); 127 break; 128 } 129 }else { 130 if (l%100<=28) { 131 System.out.println(l); 132 break; 133 } 134 } 135 } 136 137 } 138 } 139 140 } 141 } 142 143 144 //LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyyMMdd"))
标签:10,return,int,日期,rear,回文 From: https://www.cnblogs.com/Fangithub/p/17293125.html