【练习】一年中任意两天的差值

一年中任意两天的差值。输入N组数测试。(保证后一天日期晚于前一天日期)输出两个日期间的天数。

样例:

2019 1 1   2019 1 2

2016 1 1   2016 3 1

输出:

2

61

判断一年中任意两天的差值主要在于闰月的处理,和中间月份总天数处理。
#include<stdio.h>    //一年中任意两天的差值
#include<string.h>
#define Elemtype int
//1     2     3   4  5   6    7   8   9    10   11   12
//31  28(29)  31 30  31  30   31  31  30   31   30   31
int prime[12] = {31,29,31,30,31,30,31,31,30,31,30,31};//闰年
int Notprime[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//非闰年
struct date{
    Elemtype year;
    Elemtype month;
    Elemtype day;
}Date;

int IsPrime(Elemtype Year)//判断闰年
{
    if((Year%4==0&&Year%100!=0)||(Year%400==0))
        return 1;
    else
        return 0;
}

int ComDate(struct date mindate,struct date maxdate)
{
    Elemtype m = maxdate.month - mindate.month;
    Elemtype n = maxdate.day - mindate.day + 1;
    Elemtype sum = 0,i = 0;
    if(IsPrime(mindate.year)){       //闰
        for(i=mindate.month;i<=m;i++)
            sum += prime[i-1];
        sum += n;
    }else{
         for(i=mindate.month;i<=m;i++)
                sum += Notprime[i-1];
            sum += n;
    }
    return sum;
}

int main()
{
    struct date Mindate;
    struct date Maxdate;            
    /*Mindate.year = 2019; Mindate.month = 1; Mindate.day = 1;  //下面是两组测试数据
    Maxdate.year = 2019; Maxdate.month = 1; Maxdate.day = 2;*/
    Mindate.year = 2016; Mindate.month = 1; Mindate.day = 1;
    Maxdate.year = 2016; Maxdate.month = 3; Maxdate.day = 1;
    printf("Date = %d\n",ComDate(Mindate,Maxdate));
    return 0;
}

以下是两组数据分别测试的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值