日期差值

题目如下:

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

输入描述:

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

输出描述:

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

示例1

输入

20110412
20110422

输出

11

C++实现:

#include<iostream>
using namespace std;
//判断闰年条件需要谨记
int judgeYear(int year){
    if((year%4==0&&year%100!=0)||(year%400==0)){
        return 366;
    }
    else
        return 365;
}
int main(){
    int a;
    int b;
    int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    while(scanf("%d",&a)!=EOF){
        cin>>b;
        int dayA=a%100;
        int dayB=a%100;
        int monA=(a%10000)/100;
        int monB=(b%10000)/100;
        int yearA=a/10000;
        int yearB=b/10000;
        int diff=0;
        //计算两个年份之间整年所差的日期
        for(int i=yearA+1;i<yearB;i++){
            diff+=judgeYear(i);
        }
        //计算较小年份距离本年结束所差日期
        int datediff=0;
        for(int i=0;i<monA-1;i++){
            datediff+=day[i];
        }
        datediff+=dayA;
        int datediff1=365-datediff;
        //考虑闰年且月份小于2月
        if(judgeYear(yearA)==366&&monA<=2){
            datediff1+=1;
        }
        //计算较大年份距离本年开始所差日期
        int datediff2=0;
        for(int i=0;i<monB-1;i++){
            datediff2+=day[i];
        }
        datediff2+=dayB;
        if(judgeYear(yearB)==366&&monB>2){
            datediff2++;
        }
        cout<<datediff2+datediff1+diff+1<<endl;
    }
}

注意:此题在输入的8位数字中提取年月日的方法,可以利用

scanf("%4d%2d%2d",&year,&mon,&day)!=EOF

这种方法更为简洁,则不需要代码中不断取余、整除等计算取得年月日的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值