• 日期差值 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
    ", days + 1);
        }
    }
    
    
  • 相关阅读:
    Android_SQLite标准版
    AutoMapper
    ext.net实例
    Winform Ribbon开发
    数据仓库建设之《元数据管理》
    数据仓库建设之维度建模
    数据仓库建设之总方案
    一点感想
    详细探秘Linux 和 Window 双系统访问Windows 磁盘需要输入密码问题解决过程分析
    如何把数据放到C#的心里之 DB2实例
  • 原文地址:https://www.cnblogs.com/edhg/p/7745914.html
Copyright © 2020-2023  润新知