当前位置: 代码迷 >> 综合 >> 题目1096:日期差值 九度OJ
  详细解决方案

题目1096:日期差值 九度OJ

热度:46   发布时间:2023-09-24 07:06:38.0

题目1096:日期差值

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:13938

解决:4628

题目描述:

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出:

每组数据输出一行,即日期差值

样例输入:
20110412
20110422
样例输出:
11
来源:
2009年上海交通大学计算机研究生机试真题

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int caldays(int y,int m,int d){int days=1;int year=1,month=1,day=1;while(1){if((year%4==0&&year%100!=0)||year%400==0){//判断是否为闰年months[2]=29;}else{months[2]=28;}if(year==y&&month==m&&day==d){//(在经过年份++后)判断是否已达到当前日期break;}days++;day++;if(day==months[month]){if(year==y&&month==m&&day==d){break;}day=1;days++;month++;if(month==13){month=1;year++;}}}return days;
}
int main(){int y,m,d;while(scanf("%4d%2d%2d",&y,&m,&d)!=EOF){int days1,days2;days1=caldays(y,m,d);scanf("%4d%2d%2d",&y,&m,&d);days2=caldays(y,m,d);	cout<<abs(days2-days1)+1<<endl;//要注意,C++的abs()函数在<cstdlib>里,而fabs()在<cmath>里}return 0;
} 

在编写以上代码的时候,一直卡在了奇怪的地方。
在利用日期推移计算天数的时候,我仅仅在day++的时候进行了天数自增运算,days++。而在由于月份天数临界点的时候,我使用的是对day==months[month]这样的等式判断。在day达到当前月份的天数的时候,我又进行了一次天数增加的运算,month++,day=1。在最初,我没有考虑到month++同时也会引起days++,所以少写了一句days++。
题目不难,但是对我们的逻辑思维能力还是起到了一定的考察作用。
`