【问题描述】输入两个日期,计算并输出两个日期相差的天数。
本人代码太过繁杂,目前无错误。
求大神指正,求简洁代码,
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;
}