题目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++。
- 题目不难,但是对我们的逻辑思维能力还是起到了一定的考察作用。