时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:8138

解决:2752

题目描述:

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

输入:

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

输出:

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

样例输入:
20110412
20110422
样例输出:
11
来源:
2009年上海交通大学计算机研究生机试真题

思路:

直接相减需要考虑的情况比较多。比如找一个参考时间,比如00000101,算出两个日期与其差值,然后两个差值相减。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define N 10
         
int compare(int y[2], int m[2], int d[2])
{      
    if (y[0] != y[1])
        return y[0]-y[1];
    else if (m[0] != m[1])
        return m[0]-m[1];
    else if (d[0] != d[1])
        return d[0]-d[1];
    else
        return 0;
}  
     
void swap(int a[2])
{  
    int tmp;
    tmp = a[0];
    a[0] = a[1];
    a[1] = tmp;
}  
 
int days(int y, int m, int d)
{
    int count = 0;
     
    //printf("y=%d, m=%d, d=%d\n", y, m, d);
     
    count += y*365;
    count += (y-1)/4+1;
    count -= (y-1)/100+1;
    count += (y-1)/400+1;
    //printf("count=%d\n", count);
                     
    if (m > 1)     
        count += 31;
    if (m > 2)
    {
        if ((y%4 == 0 && y%100 != 0) || y%400 == 0)
            count += 29;
        else
            count += 28;
    }
    if (m > 3)
        count += 31;
    if (m > 4)
        count += 30;
    if (m > 5)
        count += 31;
    if (m > 6)
        count += 30;
    if (m > 7)
        count += 31;
    if (m > 8)
        count += 31;
    if (m > 9)
        count += 30;
    if (m > 10)
        count += 31;
    if (m > 11)
        count += 30;
    if (m > 12)
        count += 31;
    //printf("count=%d\n", count);
 
    count += d;
    //printf("count=%d\n", count);
 
    return count;
}
 
int main(void)
{
    int i;
    char s[2][N], a[N];
    int y[2], m[2], d[2];
 
    while (scanf("%s%s", s[0], s[1]) != EOF)
    {
        for(i=0; i<2; i++)
        {
            strncpy(a, s[i], 4);
            a[4] = '\0';
            y[i] = atoi(a);
            strncpy(a, s[i]+4, 2);
            a[2] = '\0';
            m[i] = atoi(a);
            strncpy(a, s[i]+6, 2);
            a[2] = '\0';
            d[i] = atoi(a);
        }
         
        printf("%d\n", abs(days(y[0], m[0], d[0]) - days(y[1], m[1], d[1])) + 1);
    }  
     
    return 0;
}
/**************************************************************
    Problem: 1096
    User: liangrx06
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:920 kb
****************************************************************/

九度OJ 1096:日期差值 (日期计算)的更多相关文章

  1. 九度oj 题目1096:日期差值

    题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行, ...

  2. 题目1096:日期差值(a-b=(a-c)-(b-c))

    http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...

  3. Android 获取当前日期距离过期时间的日期差值的完整方法直接使用

    /*** * 获取当前日期距离过期时间的日期差值 * @param endTime * @return */public String dateDiff(String endTime) { Strin ...

  4. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  5. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  6. 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...

  7. 九度OJ 1371 最小的K个数 -- 堆排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...

  8. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  9. 【九度OJ】题目1026:又一版 A+B 解题报告

    [九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...

随机推荐

  1. C# 获取当前目录上一级目录

    string path="D:\AA\BB\CC"; Directory.SetCurrentDirectory(Directory.GetParent(path).FullNam ...

  2. AT&T汇编语言及其寻址方式

    汇编语言论风格来分主要是两类,一类是Intel汇编,一类是AT&T汇编,分别被Windows和Linux作为主流风格.因为我博客以推荐Linux系统为主,所以以后多以Linux汇编为主要描述语 ...

  3. hdu 4504(动态规划)

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  4. 谈谈 ServletConfig 和 ServletContext

    目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...

  5. Tomcat、MySQL的安装与配置

    JAVA环境配置 下载安装jdk(Java Development Kit) 配置安装环境 右键计算机——>属性——>高级系统设置——>环境变量——>新建 变量名:  JAVA ...

  6. 几点iOS开发技巧

    转自I'm Allen的博客   原文:iOS Programming Architecture and Design Guidelines   原文来自破船的分享   原文作者是开发界中知晓度相当高 ...

  7. python 使用cx-freeze打包程序

    python环境 3.6.5      win7   linux环境同理 先尝试了PyInstaller   ,打包时一直提示 no module named gtk   而gtk 又依赖pygobj ...

  8. 解决Sophos UTM 9防火墙上的“根分区填满”问题

    Resolving 'Root Partition Is Filling Up' Issue on Sophos UTM Firewall 收到“Sophos UTM 9”防火墻的“根分區填满”问题的 ...

  9. ssh bitbucket github

    $ ssh-keygen -t rsa -C "mac" $ vi ~/.ssh/config Host bb User git HostName bitbucket.org Id ...

  10. 怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优

     怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优 1>.这里简单举个样例来说明DBMS_SQLTUN ...