热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

华为OJ:日期转天数算法解析

本文介绍了一个算法问题,即如何根据给定的日期计算出该日期是一年中的第几天。通过输入特定的年、月、日,程序将输出该日期在当年的具体天数。

本问题旨在探讨如何通过编程方法解决日期转换问题,具体来说,是如何将一个具体的日期转换成该年份中的第几天。

详细描述如下:

用户需要提供具体的年份、月份和日期作为输入,程序将根据这些信息计算并返回该日期在指定年份中的具体位置,即一年中的第几天。

输入描述:

输入分为三行,每行分别代表年、月、日。

输出描述:

如果计算成功,则返回计算结果,即该日期是一年中的第几天;如果输入错误或无法计算,则返回-1表示失败。

示例输入:

2012
12
31

示例输出:

366

在处理这类问题时,一个重要步骤是确定给定的年份是否为闰年。闰年的判断标准如下:

  • 普通年份:若年份能被4整除但不能被100整除,则为闰年(例如,2012年和2016年)。
  • 世纪年份:若年份既能被100整除也能被400整除,则为闰年(例如,2000年)。反之,若只能被100整除而不能被400整除,则不是闰年(例如,1900年)。

闰年和平年的主要区别在于二月的天数,闰年二月有29天,而平年二月只有28天。

下面是实现上述功能的一个Java代码示例:

import java.util.Scanner;

class DateToDay {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int year = scanner.nextInt();
int mOnth= scanner.nextInt();
int day = scanner.nextInt();
int totalDays = 0; // 记录总天数
for (int i = 1; i totalDays += getMonthDays(year, i);
}
System.out.println(totalDays + day);
}
}

// 判断是否为闰年
static boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
} else {
return false;
}
}

// 获取月份对应的天数
static int getMonthDays(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isLeapYear(year) ? 29 : 28;
default:
throw new IllegalArgumentException("Invalid month");
}
}
}

推荐阅读
author-avatar
花落---守护者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有