九度 OJ 题目1096:日期差值

题目描述:

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

输入:

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

输出:

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

样例输入:
20110412
20110422
样例输出:
11
#include <stdio.h>
#include<stdlib.h>
判断是否为闰年,不能被100整除但能被4整除,或者能被400整除的是闰年
#define ISR(x) ((x%100!=0) && (x%4==0)) || (x%400==0) ? 1 : 0
using namespace std;

//保存不同月份的天数,由于2月有两种可能所以使用二维数组
int monthDays[13][2] = {
    0,0,
    31,31,
    28,29,
    31,31,
    30,30,
    31,31,
    30,30,
    31,31,
    31,31,
    30,30,
    31,31,
    30,30,
    31,31 };

int days[5001][13][32];
int count = 0;
int main()
{
    //先计算出所有的日期距离原点日期的天数
    for(int i=0;i<5000;i++) {
        for(int j=1;j<13;j++) {
            for(int k=1;k<=monthDays[j][ISR(i)];k++) {
                days[i][j][k] = count++;
            }
        }
    }

    int y1,m1,d1;
    int y2,m2,d2;
    //利用scanf()可以指定截取连续输入的位数
    while(scanf("%4d%2d%2d", &y1,&m1,&d1) != EOF) {
        scanf("%4d%2d%2d", &y2,&m2,&d2);
        //在stdlib.h 头文件中
        int c = abs( days[y1][m1][d1] - days[y2][m2][d2]);
        printf("%d\n", c+1);    //题目要求相邻两天的差为2,所以+1
    }
    return 0;
}





用先计算所有日期与原点日期相隔天数 的方式日期类的题目的法宝
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值