这一题我是用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