概述
问题 A: 日期差值
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。
输入
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出
每组数据输出一行,即日期差值
样例输入 Copy
20130101
20130105
样例输出 Copy
5
#include<cstdio>
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool isLeap(int y){ //判断是否为闰年
return ((y%4==0 && y%100!=0)||(y%400==0));
}
int main(){
int time1,time2;
int y1,y2,m1,m2,d1,d2;
while(scanf("%d%d",&time1,&time2)!=EOF){
month[2]=28;//设置默认不是闰年
if(time1>time2){//若第一个日期更晚,交换
int temp=time1;
time1=time2;
time2=temp;
}
y1=time1/10000;
y2=time2/10000;
m1=time1%10000/100;
m2=time2%10000/100;
d1=time1%100;
d2=time2%100;
int res=1;
if(y1<y2){//计算y1年的剩余天数
if(isLeap(y1)){//如果y1是闰年
month[2]=29;
}
res+=month[m1]-d1;//计算m1月的剩余天数
m1++;
while(m1<13){ //计算剩余月份的天数
res+=month[m1];
m1++;
}
y1++;
while(y1<y2){ //若y1依然小于y2,直接加上y1年的天数
res+=365+isLeap(y1);
y1++;
}
//计算y2那年1月1日到m2月d2日有多少天
if(isLeap(y2)){ //如果y2是闰年
month[2]=29;
}else{
month[2]=28;
}
for(int i=1;i<m2;i++){
res+=month[i];
}
res+=d2;
}else{ //y1==y2
if(isLeap(y1)){ //如果是闰年
month[2]=29;
}
if(m1<m2){//不是同月
res+=(month[m1]-d1);
m1++;
while(m1<m2){
res+=month[m1];
m1++;
}
res+=d2;
}else{//m1==m2
res+=(d2-d1);
}
}
printf("%dn",res);
}
return 0;
}
最后
以上就是敏感高山为你收集整理的Codeup《算法笔记》3.4小节——入门模拟->日期处理的全部内容,希望文章能够帮你解决Codeup《算法笔记》3.4小节——入门模拟->日期处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复