zoukankan      html  css  js  c++  java
  • 日期差值

    题目描述

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

    输入

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

    输出

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

    样例输入

    20130101
    20130105

    样例输出

    5

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 int isLeap(int year){
     6     return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
     7 }
     8 int month[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
     9 int main(){
    10     int t1,t2, yy1, mm1, dd1, yy2, mm2, dd2;
    11     scanf("%d%d", &t1, &t2);
    12     if(t1 > t2)
    13         swap(t1, t2);
    14     yy1 = t1 / 10000;
    15     mm1 = (t1 % 10000) / 100;
    16     dd1 = t1 % 100;
    17     yy2 = t2 / 10000;
    18     mm2 = (t2 % 10000) / 100;
    19     dd2 = t2 % 100;
    20     int gap = 1;
    21     while(yy1 < yy2 || mm1 < mm2 || dd1 < dd2){
    22         dd1++;
    23         gap++;
    24         if(dd1 > month[isLeap(yy1)][mm1]){
    25             dd1 = 1;
    26             mm1++;
    27         }
    28         if(mm1 > 12){
    29             yy1++;
    30             mm1 = 1;
    31         }
    32     }
    33     printf("%d
    ", gap);
    34     cin >> t1;
    35     return 0;
    36 
    37 }
    View Code

    总结:

    1、日期差值的思路:从小日期开始按天累加,直到小日期等于大日期。在累加的过程中需要做进制转换,年月日的进制中,日进到月会变化,所以将这部分存储为一个二维数组,分别记录平年与闰年的每月天数。

    2、闰年:能被4整除且不能被100整除,或者能被400整除。

     
  • 相关阅读:
    C#中索引器的实现过程,是否只能根据数字进行索引?
    重载与覆盖的区别?
    C#中 property 与 attribute的区别?
    C#可否对内存进行直接的操作?
    在c#中using和new这两个关键字有什么意义?
    secs/gem协议
    框架2
    C#开发框架学习
    C#两种数据类型
    泛型参数
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/8435054.html
Copyright © 2011-2022 走看看