描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出描述:
每组数据输出一行,即日期差值
示例1
输入:
20110412
20110422
输出:
11
知识点: 暴力求解 模拟 日期问题
解法:
方案一:该题可转化为求两个日期到00010101的天数,再相减。与KY19 今年的第几天?有共通之处。
方案二:使用while循环不断寻找第一个日期的nextday,直到第二个日期。
方案一AC代码:
#include <stdio.h>
int calDay(int n) {
int y = n / 10000;
int m = n % 10000 / 100;
int d = n % 100;
int monDay[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int count = 0;
for(int i = 1; i < y; i ++) {
if(i % 400 == 0 || i % 100 != 0 && i % 4 == 0)
count += 366;
else
count += 365;
}
for(int i = 2; i <= m; i++) {
count += monDay[i - 1];
}
count += d;
return count;
}
int main() {
int n1, n2;
int count1, count2, result;
while(scanf("%d%d", &n1, &n2) != EOF) {
count1 = calDay(n1);
count2 = calDay(n2);
result = count2 - count1 + 1;
printf("%d\n", result);
}
return 0;
}
方案二AC代码:
#include <stdio.h>
int main() {
int n1, n2;
int y1, y2, m1, m2, d1, d2;
int totalDay;
int monDay[13] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
while(scanf("%d%d", &n1, &n2) != EOF) {
int y1 = n1 / 10000;
int m1 = n1 % 10000 / 100;
int d1 = n1 % 100;
int y2 = n2 / 10000;
int m2 = n2 % 10000 / 100;
int d2 = n2 % 100;
totalDay = 0;
if(y1 % 400 == 0 && y1 % 100 != 0 && y1 % 4 == 0)
monDay[2] = 29;
else
monDay[2] = 28;
while(1) {
if(y1 == y2 && m1 == m2 && d1 == d2)
break;
totalDay ++;
d1 ++;
if(d1 > monDay[m1]) {
m1 ++;
d1 = 1;
if(m1 > 12) {
y1 ++;
m1 = 1;
}
}
}
printf("%d\n", totalDay + 1);
}
return 0;
}