【九度】题目1096:日期差值

来源:互联网 发布:黑马程序员的亲身经历 编辑:程序博客网 时间:2024/05/18 13:26
题目描述:

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

输入:

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

输出:

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

样例输入:
2011041220110422
样例输出:

11

思路:分别计算每个日期与0000年01月01日日期的差值,再相减

方法一

#include <stdio.h> int mon[11] = { 31,59,90,120,151,181,212,243,273,304,334 };int Sum(int a){    int y, m, d,days,sum;    y = a / 10000;    d = a % 100;    m = (a / 100) % 100;    if ((y%100!=0 &&y%4==0 )||(y%400))    {        if (m>2)        {            days = mon[m - 2] + d + 1;        }        else if (m==1)        {            days = d;        }        else        {            days = mon[0] + d;        }    }    else    {        if (m==1)        {            days = d;        }        else        {            days = mon[m - 2] + d;        }    }    sum = (y - 1) * 365 + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400 + days;    return sum;}int Abs(int x){    return x > 0 ? x : -x;}int main(){    int day1, day2;    while (scanf("%d%d",&day1,&day2)!=EOF)    {        printf("%d\n", Abs(Sum(day1)-Sum(day2))+1);    }     }
方法二
#include<stdio.h>int dayMonth[12] = { 0,31,59,90,120,151,181,212,243,273,304,334 };bool judRun(int x)//判断是否为闰年{if (x % 400 == 0 || (x % 4 == 0 && x % 100 != 0))return true;else return false;}int countDay(int x,int count)//计算前x-1年有多少天{for (int i = 0;i < x;i++){if (judRun(i))count += 366;else{count += 365;}}return count;}int countMDday(int x, int y,int count)//计算当年前y-1月有多少天{if (judRun(x)){if (y <=2)count += dayMonth[y - 1];else{count += dayMonth[y-1]+1;}}else{count += dayMonth[y-1];}return count;}int main(){int y1,y2, m1,m2, n1,n2;while (scanf("%4d%2d%2d", &y1, &m1, &n1) != EOF){scanf("%4d%2d%2d", &y2, &m2, &n2);int count1 = 0, count2 = 0;count1 = countDay(y1, count1);count2 = countDay(y2, count2);count1 = countMDday(y1, m1, count1) + n1;count2 = countMDday(y2, m2, count2) + n2;printf("%d\n",count1 > count2 ? (count1 - count2+1) : (count2 - count1+1));}    return 0;}


0 0
原创粉丝点击