代码练习(1):日期累加

题目描述

设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述:

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述:

输出m行,每行按yyyy-mm-dd的个数输出。

示例1
输入

1
2008 2 3 100

输出

2008-05-13

代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        int[] months = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        int days =0;
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int m = Integer.parseInt(bf.readLine());//样例数
        for(int i=0; i<m; i++) {
            String[] times = bf.readLine().split(" ");
            int year = Integer.parseInt(times[0]);
            int month = Integer.parseInt(times[1]);
            int day = Integer.parseInt(times[2]);
            int n = Integer.parseInt(times[3]);
            months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
            days = (months[2] == 29) ? 366 : 365;
            if(months[2] == 29) {//闰年
                for(; n >= days; ) {//需要累加的天数缩短在1年之内
                    n -= days;
                    year++;
                    months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
                    days = (months[2] == 29) ? 366 : 365;
                }
                for(; n >= months[month]; ) {//天数按月累加
                    n -= months[month];
                    month++;
                    if(month > 12) {
                        year++;
                        month = 1;
                    }
                    months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
                }
                for(; n>0; n--) {//天数按天累加
                    day += 1;
                    if(day > months[month]) {
                        month++;
                        day = 1;
                        if(month > 12) {
                            year++;
                            month = 1;
                        }
                        months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
                    }
                }
                String month1 = String.format("%02d", month);
                String day1 = String.format("%02d", day);
                System.out.println(year+"-"+month1+"-"+day1);
            }else {//平年
                for(; n >= days; ) {//需要累加的天数缩短在1年之内
                    n -= days;
                    year++;
                    months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
                    days = (months[2] == 29) ? 366 : 365;
                }
                for(; n >= months[month]; ) {//天数按月累加
                    n -= months[month];
                    month++;
                    if(month > 12) {
                        year++;
                        month = 1;
                    }
                    months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
                }
                for(; n>0; n--) {//天数按天累加
                    day += 1;
                    if(day > months[month]) {
                        month++;
                        day = 1;
                        if(month > 12) {
                            year++;
                            month = 1;
                        }
                        months[2] = (year%400==0) || (year%4==0 && year%100!=0) ? 29 : 28;
                    }
                }
                String month1 = String.format("%02d", month);
                String day1 = String.format("%02d", day);
                System.out.println(year+"-"+month1+"-"+day1);
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值