程序算术题-5

news/2024/12/21 9:53:08/

程序算术题-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天

代码

查看题目计算代码


http://www.ppmy.cn/news/1556896.html

相关文章

点亮技术写作之路:CSDN文章创作秘籍分享

一、引言 &#xff08;一&#xff09;技术文章的重要性 在当今技术飞速发展的时代&#xff0c;优秀的技术文章扮演着举足轻重的角色&#xff0c;其重要性体现在多个关键方面。 首先&#xff0c;它是知识传承的核心载体。技术领域的知识如同浩瀚星辰&#xff0c;新的理念、方法…

在Linux系统中, 查询mysql

在Linux系统中&#xff0c;MySQL的启动文件通常位于/etc/init.d目录下&#xff0c;文件名通常以mysql或者mysqld开头。你可以使用以下命令来查找MySQL的启动脚本&#xff1a; sudo find / -name "mysql*" -type f 这个命令会搜索整个文件系统来找到所有以mysql开头…

【Java基础面试题025】什么是Java的Integer缓存池?

回答重点 Java的Integer缓存池&#xff08;Integer Cache&#xff09;是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围&#xff0c;因此缓存这些对象可以减少内存分配和垃圾回收的负担&#xff0c;提升性能 在 -128到127范围内的Integer对象会…

如何利用大模型将语音转文字

如何利用大模型将语音转文字 OpenAI支持将语音转文字&#xff0c;调用接口可以直接将语音文件转为文字。 这个例子是调用了一个私有部署的Belle-whisper-large-v2-zh&#xff0c;使用OpenAI的客户端。 测试代码如下&#xff1a; from openai import OpenAIclient OpenAI(ba…

OpenEuler 22.03 安装 flink-1.17.2 集群

零&#xff1a;规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器&#xff0c;用于搭建 flink 集群。这里使用flink1.17.2 的原因&#xff0c;是便于后续与springboot的整合 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…

RCNN系列是如何逐步改善的

1、R-CNN的缺点&#xff1a; 1&#xff09;计算效率低下&#xff1a;RCNN需要为每一个候选框都提取特征&#xff0c;会导致大量重复的工作&#xff0c;因为候选框是原始图片的一部分&#xff0c;肯定是存在交集的。2&#xff09;需要大量的磁盘空间&#xff1a;在训练阶段&…

基于Spring Boot的雅苑小区管理系统

一、系统背景与意义 随着信息化技术的快速发展&#xff0c;传统的小区物业管理方式已经难以满足现代居民对于高效、便捷服务的需求。因此&#xff0c;开发一款基于Spring Boot的小区管理系统显得尤为重要。该系统旨在通过信息化手段&#xff0c;实现小区物业管理的智能化、自动…