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整除。

     
  • 相关阅读:
    扩展问题
    oracle数据类型及其隐式转换 (摘,转载)
    oralce中to_char默认转换格式的理解
    oracle的to_char中的fm(转,摘录)
    Oracle中TO_DATE TO_CHAR格式(转,摘录)
    ZT Abstract Factory
    ZT Factory Pattern
    Singleton
    几本电子书比较
    名词后变为复数+s,或者+es等怎么读
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/8435054.html
Copyright © 2011-2022 走看看