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

题目描述:

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

输入:

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

输出:

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

样例输入:
20110412
20110422
样例输出:

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;
}


你可能感兴趣的:(【九度】题目1096:日期差值)