时间限制: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. 【POJ3352】Road Construction(边双联通分量)

    题意:给一个无向图,问最少添加多少条边后能使整个图变成双连通分量. 思路:双连通分量缩点,缩点后给度为1的分量两两之间连边,要连(ans+1) div 2条 low[u]即为u所在的分量编号,flag ...

  2. 【CF676C】Vasya and String(二分查找,线性扫描尺取法)

    题意: 给出一个长度为n的字符串,只有字符'a'和'b'.最多能改变k个字符,即把'a'变成'b'或把'b'变成'a'. 问改变后的最长连续相同字符的字串长度为多少. 首先是二分查找,好想也好写 .. ...

  3. Windows下php环境变量的配置

    1.找到php的路径比如"E:\php_env\PHP".    2.需要保证该目录下php.ini的配置是正确的,如果是刚下载的php包,则可能需要修改相应的一些配置:将php目 ...

  4. AC日记——爱改名的小融2 codevs 3149

    3149 爱改名的小融 2  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Wikioi上有个人叫小融,他喜 ...

  5. python笔记4:高级特性

    4 高级特性 4.1  切片 [:] *注:-- list和tuple,字符串都支持切片 4.2 迭代 Iteration for ... in 及 for ... in if 两个变量迭代时, 例1 ...

  6. Java开发者使用C++写程序踩的坑

    笔者是一个很矛盾的人.平时用Java.但是一开始学习的时候学的是汇编语言,而且对C语言也很熟悉.为什么不学C++呢?是因为我可以完全用Java的编码规范去写C++.因此我不需要了解更多的诸如C++的命 ...

  7. spring lifeCycle

    Lifecycle接口定义了每个对象的生命周期.如下 public interface Lifecycle { void start(); void stop(); boolean isRunning ...

  8. iOS -- app全局字体设置

    方法一: 写一个UILabel(FontExtension)扩展重写initWithFrame(手写代码必走方法)和awakeFromNib(xib必走方法)当然UIButton.UITextView ...

  9. 开源软件许可认证:open softwae license

    OSIA认证的开放源代码软件的软件许可证有如下21种: 1.The GNU General Public License (GPL) 2.The GNU Library or "Lesser ...

  10. Android Studio调试工具总结

       前言:写代码不可避免有Bug.通常情况下除了日志最直接的调试手段就是debug.当我们的程序出现bug时,调试能够高速的找到bug. 进入调试状态.我们能够清晰的了解程序的整个运行过程,能够对内 ...