java题目计算日期到天数转换

描述

根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(1)\O(1) 

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

示例1

输入:
2012 12 31
输出:
366

示例2

输入:
1982 3 4
输出:
63

 

 

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.util.HashMap;
 5 
 6 /**
 7  * 描述
 8  * 根据输入的日期,计算是这一年的第几天。
 9  * 保证年份为4位数且日期合法。
10  * 进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(1)\O(1)
11  * 输入描述:
12  * 输入一行,每行空格分割,分别是年,月,日
13  *
14  * 输出描述:
15  * 输出是这一年的第几天
16  */
17 public class Main {
18     static HashMap<Integer, Integer> map = new HashMap<>();
19     static {
20         map.put(1, 31);
21         map.put(3, 31);
22         map.put(4, 30);
23         map.put(5, 31);
24         map.put(6, 30);
25         map.put(7, 31);
26         map.put(8, 31);
27         map.put(9, 30);
28         map.put(10, 31);
29         map.put(11, 30);
30         map.put(12, 31);
31     }
32     public static void main(String[] args) throws IOException {
33         final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
34         String in;
35         while ((in = br.readLine()) != null) {
36             int sum = 0;
37             final String[] strArr = in.split(" ");
38             // 判断是不是闰年
39             if (checkYear(Integer.parseInt(strArr[0]))) {
40                 map.put(2, 29);
41             } else {
42                 map.put(2, 28);
43             }
44             // 累计月份前的天数
45             int month = Integer.parseInt(strArr[1]);
46             for (int i = 1; i < month; i++) {
47                 sum = sum + map.get(i);
48             }
49             int day = Integer.parseInt(strArr[2]);
50             sum = sum + day;
51             System.out.println(sum);
52         }
53     }
54 
55     /**
56      * 判断是不是闰年
57      * 闰年:
58      * (1)十年一闰百年不闰:即如果year能够被4整除,但是不能被100整除,则year是闰年。
59      * (2)每四百年再一闰:如果year能够被400整除,则year是闰年。
60      * @param year
61      * @return
62      */
63     private static boolean checkYear(int year) {
64         if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
65             return true;
66         }
67         return false;
68     }
69 }

 

posted @ 2022-03-05 21:28  海漠  阅读(268)  评论(0编辑  收藏  举报