C/C++ 求任意起始年月日到任意终止年月日之间的天数

规定输入格式为:
起始年 月 日 终止年 月 日
2021年1月1日-2021年1月2日为经过两天

#include <stdio.h>
#include <stdlib.h>

int sum=0;
int monthp[13];
int monthr[13];//r是闰年,p是平年

int leap(int i)
{
    int flag=0;
    if((i%4==0&&i%100!=0)||i%400==0)
        flag=1;
    return flag;
}

void year_start(int year1, int month1, int day1)
{
    if(leap(year1))
    {
        sum=monthr[month1]-day1+1;
        for(int i=month1+1;i<=12;i++)
        {
            sum+=monthr[i];
        }
    }
    else
    {
        sum=monthp[month1]-day1+1;
        for(int i=month1+1;i<=12;i++)
        {
            sum+=monthp[i];
        }
    }
}

void year_middle(int year1,int year2)
{
    for(int i=year1+1;i<=year2-1;i++)
    {
        if(leap(i))
            sum+=366;
        else
            sum+=365;
    }
}

void year_end(int year2, int month2, int day2)
{   
    if(leap(year2))
    {
        for(int i=1;i<=month2-1;i++)
        {
          sum+=monthr[i];
        }
    }
    else
    {
        for(int i=1;i<=month2-1;i++)
        {
          sum+=monthp[i];
        }
    }
    sum+=day2;
}

void month_start(int year1,int month1,int day1,int month2,int day2)
{
    if(leap(year1))
    {
        sum=monthr[month1]-day1+1;  
    }
    else
    {
        sum=monthp[month1]-day1+1;
    }
}

void month_middle(int year1,int month1,int day1,int month2,int day2)
{
    if(leap(year1))
    {
        for(int i=month1+1;i<=month2-1;i++)
        {
            sum+=monthr[i];
        }
    }
    else
    {
        for(int i=month1+1;i<=month2-1;i++)
        {
            sum+=monthp[i];
        }
    }
    
}

void month_end(int day2)
{
    sum+=day2;
}


int main()
{   
    for(int i=1;i<=7;i+=2)
        monthp[i]=31;
    for(int i=8;i<=12;i+=2)
        monthp[i]=31;

    for(int i=1;i<=7;i+=2)
        monthr[i]=31;
    for(int i=8;i<=12;i+=2)
        monthr[i]=31;

    for(int i=4;i<=6;i+=2)
        monthp[i]=30;
    for(int i=9;i<=11;i+=2)
        monthp[i]=30;   
    monthp[2]=28;

    for(int i=4;i<=6;i+=2)
        monthr[i]=30;
    for(int i=9;i<=11;i+=2)
        monthr[i]=30;   
    monthr[2]=29;

    int year1,month1,day1;
    int year2,month2,day2;
    scanf("%d %d %d",&year1,&month1,&day1);
    scanf("%d %d %d",&year2,&month2,&day2);
    ;
    if(!(year1==year2))
    {
        year_start(year1,month1,day1);
        if((year2-year1)>1)
            year_middle(year1,year2);
        year_end(year2,month2,day2);
    }
        
    else if(!(month1==month2))
    {
        month_start(year1,month1,day1,month2,day2);
        month_middle(year1,month1,day1,month2,day2);
        month_end(day2);
    }
    else
    {
        sum+=day2-day1+1;
    }
    
    printf("%d\n",sum);
    system("pause");
    return 0;
}

结果展示:
2000 1月 1日至2021 10月15日 经过天数为7959天2000 1月 1日至2021 10月15日 经过天数为7959天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值