日期差值 1096

问题描述

链接:https://www.nowcoder.com/questionTerminal/ccb7383c76fc48d2bbc27a2a6319631c

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

输入描述:

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

输出描述:

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

示例1

输入

20110412
20110422

输出

11

思路

  1. 推荐思路(乾哥的思路):

    软男说算法能过就行, 尽可能把实现的方法想简单些(emmmm)

    • 计算第一个日期中月份和日到一月一日的天数, 记为days1
    • 计算第一个日期中月份和日到一月一日的天数, 记为days2
    • 只计算两个日期的年份对应的日期差值
  2. 大辣鸡思路(me):

    • 计算年之间差值
    • 计算月之间差值
    • 计算日之间差值

代码

#include <cstdio>

int month[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 isLeap(int year) {
    /*
     * 求平年闰年
     * 平年返回0
     * 闰年返回1
     */
    if (year % 100 != 0 && year % 4 == 0 || year % 400 == 0) {
        return 1;

    } else {
        return 0;
    }
}

int main() {
    int y1 = 0, m1 = 0, d1 = 0, y2 = 0, m2 = 0, d2 = 0;
    while (scanf("%4d%2d%2d", &y1, &m1, &d1) != EOF) {
        scanf("%4d%2d%2d", &y2, &m2, &d2);
        //平年365天
        //闰年366天
        int days1 = 0;//日期一, 月及日到当年一月一日的天数
        int days2 = 0;//日期二, 月及日到当年一月一日的天数
        int days = 0; //最后返回两日期的差值
        
        for (int i = 1; i < m1; ++i) {
            /*
             * 求日期一, 月到当年一月一日的天数
             */
            days1 += month[i][isLeap(y1)];
        }
        
        for (int i = 1; i < m2; ++i) {
            /*
             * 求日期二, 月到当年一月一日的天数
             */
            days2 += month[i][isLeap(y2)];
        }
        
        //求日期一,日期二, 日到当月一日的天数
        days1 += d1;
        days2 += d2;


        //求两日期年份差值
        if (y1 > y2) {
            for (; y2 < y1; y2++) {
                if (isLeap(y2) == 1) {
                    days += 366;
                } else {
                    days += 365;
                }
            }
            days += days1 - days2;
        } else {
            for (; y1 < y2; y1++) {
                if (isLeap(y1) == 1) {
                    days += 366;
                } else {
                    days += 365;
                }
            }
            days += days2 - days1;
        }
        
        //按照题目叙述,需要返回差值加一
        printf("%d\n", days + 1);
    }
}

posted @ 2017-10-28 09:00  twfb  阅读(247)  评论(0编辑  收藏  举报