真正的神棍节
其实真正的神棍节早在人类还没有诞生之前都已经被史前生物过了。
难道是神棍节那天,大神们纷纷从天而降,掳走了几乎所有雌性?导致绝大多数物种断了香火纷纷绝迹!!~
下面看下我写的对称日求法,若有大人知道更高效的做法请指点一下
1 package froest.algorithm;
2
3 import java.util.Scanner;
4
5 public class SymmetryDate {
6 /**
7 * isLeap判断是否为闰年
8 * @param year
9 * @return
10 */
11 public Boolean isLeap(int year) {
12 return ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
13 }
14 /**
15 * 判断输入的年份是否有对称日,如果有,先判断是否符合日期规范,符合则输出此对称日,否则输出"error date"
16 * @param year
17 * @return
18 */
19 public String isSymmetryData(String year) {
20 int i = Integer.parseInt(year);
21 /**
22 * tempDate存储月份与日期
23 */
24 String tempDate = "";
25 while(i>0){
26 tempDate = tempDate + i%10;
27 i /= 10;
28 }
29 String ymd = year+tempDate;
30 int[] days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
31
32 SymmetryDate date = new SymmetryDate();
33 /**
34 * isLeap判断闰年
35 */
36 if(date.isLeap(Integer.parseInt(year))){
37 days[2] = 29;
38 }
39 /**
40 * month和day用来判断输入的当前月的天数是不是符合正常的日期
41 */
42 int month = Integer.parseInt(ymd.substring(4, 6));
43 int day = Integer.parseInt(ymd.substring(6, 8));
44 /**
45 * a0到a3分别表示year的每一位
46 * 比如2011,则a0 = 2,a1 = 0,a2 = 1,a3 = 1
47 */
48 int a0 = Integer.parseInt(year.charAt(0)+"");
49 int a1 = Integer.parseInt(year.charAt(1)+"");
50 int a2 = Integer.parseInt(year.charAt(2)+"");
51 int a3 = Integer.parseInt(year.charAt(3)+"");
52 if(a2>3||a3>1||(a0 == 0 && a1 == 0)||(a2 == 0 && a3 == 0)||(month > 12)||day > days[month]){
53 return "error date";
54 }
55
56 return ymd;
57 }
58
59 public static void main(String[] args) {
60 // TODO Auto-generated method stub
61 SymmetryDate date = new SymmetryDate();
62 Scanner scan = new Scanner(System.in);
63 int startDate = scan.nextInt();
64 int endDate = scan.nextInt();
65 Long startTime = System.currentTimeMillis();
66 /**
67 * 根据月份和日期初步判断year的范围,月份为0-12,日期为0-31
68 * 判断个位<=1,百位<=3,更加细致的判断在isSymmetryData方法中,
69 * 此方法会判断是否符合日期格式
70 */
71 endDate = endDate > 9391?9391:endDate;
72 int count = 0;
73 for(int i = startDate ; i < endDate ; i++){
74 String ymdTemp = date.isSymmetryData(i+"");
75 if("error date".equals(ymdTemp)){
76 continue;
77 }else{
78 System.out.print(ymdTemp);
79 count++;
80 if((count & 0x7) == 0){
81 System.out.println();
82 }else{
83 System.out.print(" ");
84 }
85 }
86 }
87 Long endTime = System.currentTimeMillis();
88 System.out.println();
89 System.out.println(endTime - startTime + "毫秒");
90 }
91
92 }
输入:
1000
10000
输出:
10011001 10100101 10111101 10200201 10211201 10300301 11011011 11100111
11111111 11200211 11211211 11300311 12011021 12100121 12111121 12200221
12211221 12300321 13011031 13100131 13211231 13300331 20011002 20100102
20111102 20200202 20211202 20300302 21011012 21100112 21111112 21200212
21211212 21300312 22011022 22100122 22111122 22200222 22211222 22300322
30011003 30100103 30111103 30200203 30211203 30300303 31011013 31100113
31111113 31200213 31211213 31300313 32011023 32100123 32111123 32200223
32211223 32300323 40011004 40100104 40111104 40200204 40211204 40300304
41011014 41100114 41111114 41200214 41211214 41300314 42011024 42100124
42111124 42200224 42211224 42300324 50011005 50100105 50111105 50200205
50211205 50300305 51011015 51100115 51111115 51200215 51211215 51300315
52011025 52100125 52111125 52200225 52211225 52300325 60011006 60100106
60111106 60200206 60211206 60300306 61011016 61100116 61111116 61200216
61211216 61300316 62011026 62100126 62111126 62200226 62211226 62300326
70011007 70100107 70111107 70200207 70211207 70300307 71011017 71100117
71111117 71200217 71211217 71300317 72011027 72100127 72111127 72200227
72211227 72300327 80011008 80100108 80111108 80200208 80211208 80300308
81011018 81100118 81111118 81200218 81211218 81300318 82011028 82100128
82111128 82200228 82211228 82300328 90011009 90100109 90111109 90200209
90211209 90300309 91011019 91100119 91111119 91200219 91211219 91300319
92011029 92100129 92111129 92200229 92211229 92300329
39毫秒
39毫秒是我运行这个程序的时间
真正的神棍节你发现了吗?
若某大神知道更高效的做法,望传授,思想即可
----->froest
爱情终将消失于茫茫的时间洪流之中,沉淀于厚重的黄泥沙丘之下...