计算日期差值

【问题描述】输入两个日期,计算并输出两个日期相差的天数。

本人代码太过繁杂,目前无错误。

求大神指正,求简洁代码,

AC代码:

#include<iostream>
using namespace std;

int runnian(int year)
{
    if(year%4==0&year%100!=0||year%400==0)
        return 1;
    else
        return 0;
}
int main()
{
    int days=0;
    int y1,m1,d1;
    int y2,m2,d2;
    cout<<"setday:"<<endl;
    cin>>y1>>m1>>d1;
    cin>>y2>>m2>>d2;

if(y1<y2)
{
   for(int i=y1;i<y2;i++)
   {
        if(runnian(i))
            days+=366;
        else
            days+=365;
   }
   for(int i=1;i<m1;i++)
   {
      switch(i)
      {
         case 1:case 3:case 5:case 7:case 8:case 10:case 12:
         days-=31;break;
         case 4: case 6:case 9:case 11:
         days-=30;break;
         case 2:
         if(runnian(y1))
           days-=29;
         else
           days-=28;
      }
   }
   days=days-d1;
   for(int i=1;i<m2;i++)
   {
      switch(i)
      {
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:
        days+=31;break;
        case 4:case 6:case 9:case 11:
        days+=30;break;
        case 2:
        if(runnian(y2))
          days+=29;
        else
          days+=28;
      }
   }
   days=days+d2;
}

else if(y2<y1)
{
   for(int i=y2;i<y1;i++)
   {
      if(runnian(i))
          days+=366;
      else
          days+=365;
   }
   for(int i=1;i<m2;i++)
   {
     switch(i)
    {
       case 1:case 3:case 5:case 7:case 8:case 10:case 12:
         days-=31;break;
       case 4:case 6:case 9:case 11:
         days-=30;break;
       case 2:
         if(runnian(y2))
            days-=29;
         else
            days-=28;
    }
   }
   days=days-d2;
   for(int i=1;i<m1;i++)
   {
      switch(i)
     {
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:
          days+=31;break;
        case 4:case 6:case 9:case 11:
          days+=30;break;
        case 2:
          if(runnian(y1))
             days+=29;
          else
             days+=28;
    }
   }
   days=days+d1;
}

else
{
  if(m1<m2)
  {
    for(int i=m1;i<m2;i++)
    {
      switch(i)
     {
         case 1:case 3:case 5:case 7:case 8:case 10:case 12:
           days+=31;break;
         case 4:case 6:case 9:case 11:
           days+=30;break;
         case 2:
           if(runnian(y1))
              days+=29;
           else
              days+=28;
     }
    days=days+d2-d1;
    }
  }

  else if(m2<m1)
      {
        for(int i=m2;i<m1;i++)
       {
          switch(i)
         {
             case 1:case 3:case 5:case 7:case 8:case 10:case 12:
               days+=31;break;
             case 4:case 6:case 9:case 11:
               days+=30;break;
             case 2:
               if(runnian(y1))
                  days+=29;
               else
                  days+=28;
         }
       }
      days=days+d1-d2;
      }
   else
    {
        if(d1<d2)
            days=d2-d1;
        else
            days=d1-d2;
    }
}
    cout<<days<<endl;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gofor.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值