我是靠谱客的博主 敏感高山,最近开发中收集的这篇文章主要介绍Codeup《算法笔记》3.4小节——入门模拟->日期处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题 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小节——入门模拟->日期处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部