PTA求前N天

这一题我是用Java写的,我花了一个多小时,将我自己写的一百多行代码,优化为50行。
输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。

import java.util.Scanner;
public class Main {
    public static void  main(String[] args) {
        int year, month, day;
        int n;
        int[] Month = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        Scanner in = new Scanner(System.in);
        year = in.nextInt();month = in.nextInt();day = in.nextInt();n = in.nextInt();
        if(year>2020||year<1820||month>12||month<1||day>31||day<1){
            System.out.println("Wrong Format");
        }
        else if(!((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)&&month==2&&day>28){
                    System.out.println("Wrong Format");
        }
        else {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
            {
                Month[2]=29;
            }
            if (day - n >= 1 && day - n <=Month[month])
            {
                System.out.printf("%d days ago is:%d-%d-%d\n", n, year, month, day - n);
            }
            else if (day - n > Month[month]) {
                if (month == 12) {
                    year = year +1;
                    day = day-n-Month[1];
                    month=1;
                }
                else {
                    day = day -n- Month[month];
                    month = month+1;
                }
                System.out.printf("%d days ago is:%d-%d-%d\n", n, year, month, day);
            }
            else if (day - n < 1) {
                if (month == 1){
                    year = year -1;
                    day = Month[month] + (day - n);
                    month = 12;
                }
                else{
                    month = month -1;
                    day = Month[month]+(day-n);
                }
                System.out.printf("%d days ago is:%d-%d-%d\n", n, year, month, day);
            }
        }
    }
    }

输入:2018 6 19 8
输出 :8 days ago is:2018-6-11

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

“逢雨”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值