程序算术题-5
- 求这一天是在这一年的多少天
- 题目
- 逻辑
- 方法一
- 方法二
- 实例
- 代码
求这一天是在这一年的多少天
题目
输入某年某月某日,判断这一天是这一年的第几天?
逻辑
java"> /*** 求这一天是这一年的多少天* args[0] 年* args[1] 月* args[2] 日*/
第一个输入参数作为年,第二个输入参数作为月,第三个输入参数作为日。
方法一
方法一采用的是变量计算的方式。
java"> Integer month = Integer.valueOf(args[1]);int odds = Math.floorDiv(month, 2);int evens = (Math.floorMod(month, 2) == 0) ? (odds - 1) : odds;int repEvent2OddCount = evens > 2 ? evens - 3 : 0;int repOdd2EventCount = odds > 3 ? odds - 4 : 0;System.out.println(Integer.valueOf(args[2]) + repOdd2EventCount * 30 + (odds - repOdd2EventCount) * 31 + ((evens >= 1 ? (Integer.valueOf(args[0]) % 4 == 0 ? 29 : 28) + repEvent2OddCount * 31 + (evens - 1 - repEvent2OddCount) * 30 : 0)));
用Integer.valueOf将输入的年月日String参数转化为Integer,方便后面的计算使用。
由于每4年一个闰年,闰年的2月份为29天,其它年份的2月份皆为28天,这里可以通过(Integer.valueOf(args[0]) % 4 == 0) ? 29 : 28对年份进行判断并为2月份的总天数设值。利用Math.floorDiv(month, 2)得出经过的单月数量以及(Math.floorMod(month, 2) == 0) ? (odds - 1) : odds得出经过的双月数量。
7月之前的双月是31天,单月是30天。从7月份开始的单月是31天,双月是30天。利用evens > 2 ? evens - 3 : 0和odds > 3 ? odds - 4 : 0分别计算出单双月天数互转的数量,repEvent2OddCount为双月天数需要转换的数量,repOdd2EventCount为单月天数需要转换的数量。
最后通过天数累加Integer.valueOf(args[2]) + repOdd2EventCount * 30 + (odds - repOdd2EventCount) * 31 + ((evens >= 1 ? (Integer.valueOf(args[0]) % 4 == 0 ? 29 : 28) + repEvent2OddCount * 31 + (evens - 1 - repEvent2OddCount) * 30 : 0))计算出总天数,这个总天数就是这天在这年的第几天。
方法二
方法二采用的是常量池的方式
java"> int[] month_date = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};Integer year = Integer.valueOf(args[0]);if (year % 4 == 0) {month_date[2] = 29;}int totalDate = 0;for (int i = 0; i < Integer.valueOf(args[1]); i++) {totalDate += month_date[i];}System.out.println(totalDate + Integer.valueOf(args[2]));
如果觉得方法一利用变量的方法未能理解,可以采用这种比较直观的方法,直接把上一个月份的天数定义成整数数组,数组索引为月份。由于1月份前面没有月份,所以它的值为0,2月份的值先采用28天,后面再对闰年另外做29天值的修改,数组如下new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30}。对闰年的判断(year % 4 == 0),如果是闰年则修改month_date[2] = 29。
然后就是对前面月份总天数的累计totalDate += month_date[i],最后再加上当月的天数totalDate + Integer.valueOf(args[2]),得到总天数,这个总天数就是这天在这年的第几天。
实例
输入日期为2024年5月23日
144
计算出是2024年的第144天
代码
查看题目计算代码