题目
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入格式
输入包含多组测试数据。
每组数据占两行,分别表示两个日期,形式为 YYYYMMDD。
输出格式
每组数据输出一行,即日期差值。
数据范围
年份范围 [1,9999]
保证输入日期合法。
测试数据的组数不超过 100。
- 输入样例:
20110412
20110422
- 输出样例:
11
题解(这里是引用大佬的代码,为什么不自己写思路会解释)
import java.util.*;
public class Main {
static int[] p = new int[10];
static int[] month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public static boolean check(int x)
{
if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0)
return true;
return false;
}
public static int solve(int a, int b, int c)
{
int res = 0;
for (int i = 1; i < a; i ++ )
{
if (check(i)) res += 366;
else res += 365;
}
for (int i = 1; i < b; i ++ )
{
if (i == 2 && check(a))
res += 1;
res += month[i - 1];
}
res += c;
return res;
}
public static int get(String x)
{
int a = 0, b = 0, c = 0;
for (int i = 1; i <= x.length(); i ++ )
p[i] = x.charAt(i - 1) - '0';
a = p[1] * 1000 + p[2] * 100 + p[3] * 10 + p[4];
b = p[5] * 10 + p[6];
c = p[7] * 10 + p[8];
return solve(a, b, c);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext())
System.out.println(Math.abs(get(sc.next()) - get(sc.next())) + 1);
}
}
作者:ifei_2
链接:https://www.acwing.com/activity/content/code/content/7989601/
来源:AcWing
思路
这道题是一道简单计算题,做这道题签完不要想着去计算两个日期中间的时间,那样太过于麻烦,会有太多条件判断,这种情况一般直接计算两个日期的总天数相减就行了。博主就是计算中间天数写了半个小时条件最后懒得写了,警钟长鸣!!因为日期计算确实是简单题,不应该在上面花费太多时间。