题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的,则规定他们之间的天数为两天。
样例输入:
20130101
20130105
样例输出:
5
解题思路:
闰平年的天数可以利用打表法,填入一个二维数组中,方便直接调用
最简单的就是一天一天的累加,直到天数小的加到等于大的
如果天数达到该月数最大,月数+1,天数置为1
如果月数达到13,年数+1,月数置为1
优化可以先将year1和year2的差值变为1,之后再进行上述操作
代码:
/** *作者:魏宝航 *2020年11月26日,下午20:32 */ import java.util.*; public class Test{ public static int[][] month=new int[][] { {0,0}, {31,31},{28,29},{31,31}, {30,30},{31,31},{30,30}, {31,31},{31,31},{30,30}, {31,31},{30,30},{31,31}}; public static int isLeap(int year) { if((year%4==0&&year%100!=0)||(year%400==0)){ return 1; } return 0; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int time1,time2; time1=sc.nextInt(); time2=sc.nextInt(); if(time1>time2) { time1^=time2; time2^=time1; time1^=time2; } int year1=time1/10000; int year2=time2/10000; int month1=time1%10000/100; int month2=time2%10000/100; int day1=time1%100; int day2=time2%100; int ans=1; while(year1<year2||month1<month2||day1<day2) { day1++; if(month[month1][isLeap(year1)]+1==day1) { month1++; day1=1; } if(month1==13) { year1++; month1=1; } ans++; } System.out.println("两天的间隔为:"+ans); } }