九度-题目1096:日期差值

来源:互联网 发布:js动态创建表格 编辑:程序博客网 时间:2024/05/17 10:27
题目1096:日期差值

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:9063

解决:3091

题目描述:

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

输入:

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

输出:

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

样例输入:
2011041220110422
样例输出:
11
来源:
2009年上海交通大学计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7819-1-1.html


这道题是计算两个日期之间的差,值得注意的是两个相邻日期的差为2,而不是1,另外闰年判断的刚开始时候容易出错,虽然思路简单,不过还是要细致,我第一次就因为闰年好久没写,落了个条件而导致错误,不应该。
上代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<string.h>#include<cmath>using namespace std;int year(int y){//用来判断闰年 .四年一闰,百年不闰,四百年再闰 if(y%400==0)return 1;else if(y%100==0)return 0;else if(y%4==0)return 1;elsereturn 0;}int sum3(int y){if(y%400==0)return 366;else if(y%100==0)return 365;else if(y%4==0)return 366;else return 365;}int sum1(int y,int m,int d){//正向求日期和 int sum=0;for(int i=0;i<y;i++){sum=sum+sum3(i);}//cout<<"1这时的sum="<<sum<<'\n';int day1[14]={0,31,28,31,30,31,30,31,31,30,31,30,31};    int day2[14]={0,31,29,31,30,31,30,31,31,30,31,30,31};    if(year(y)){     for(int i=1;i<m;i++){    sum+=day2[i];}sum+=d;}else{  for(int i=1;i<m;i++){  sum+=day1[i];  }  sum+=d;}//cout<<"2这时的sum="<<sum<<'\n';   return sum;}int main(){int a;while(cin>>a){long long sum=0;int y1,y2,m1,m2,d1,d2,b;cin>>b;y1=a/10000;y2=b/10000;m1=(a/100)%100;m2=(b/100)%100;d1=a%100;d2=b%100;//cout<<"y1="<<y1<<' '<<"m1="<<m1<<' '<<"d1="<<d1<<'\n';//cout<<"y2="<<y2<<' '<<"m2="<<m2<<' '<<"d2="<<d2<<'\n';//cout<<"sum1为:"<<sum1(y1,m1,d1)<<' '<<"sum2为"<<sum1(y2,m2,d2)<<'\n';sum=abs(sum1(y1,m1,d1)-sum1(y2,m2,d2))+1;    cout<<sum<<'\n';}return 0;}



总结:注意细节,还有数组初始化的方式,分步输出的方式进行检查,集中注意力,杜绝小错误。
1 0
原创粉丝点击