本文主要是介绍大厂Java笔试题之计算日期是一年中第几天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目: 描述 根据输入的日期,计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶:时间复杂度:O(n) ,空间复杂度:O(1) 输入描述: 输入一行,每行空格分割,分别是年,月,日 输出描述: 输出是这一年的第几天
示例 输入:2012 12 31 输出:366
public class Demo14 {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseString s = in.nextLine();String[] split = s.split(" ");int year = Integer.parseInt(split[0]);int month = Integer.parseInt(split[1]);int day = Integer.parseInt(split[2]);System.out.println(calculateDayOfYear(year, month, day));}}private static boolean isValidDate(int year, int month, int day) {if (year < 1000 || year > 9999) {return false;}if (month < 1 || month > 12) {return false;}int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};if (isLeapYear(year)) {daysInMonth[1]++; // February has 29 days in a leap year}return day >= 1 && day <= daysInMonth[month - 1];}private static boolean isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}private static int calculateDayOfYear(int year, int month, int day) {if (!isValidDate(year, month, day)) {return 0;}int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int sum = 0;for (int i = 0; i < month - 1; i++) {sum += daysInMonth[i];}if (isLeapYear(year) && month > 2) {sum++; // Add an extra day for February in a leap year}return sum + day;}
}
如果大家需要视频版本的讲解,欢迎关注我的B站:
这篇关于大厂Java笔试题之计算日期是一年中第几天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!