题解 | #计算日期到天数转换#
计算日期到天数转换
https://www.nowcoder.com/practice/769d45d455fe40b385ba32f97e7bcded
//简单计算:算出所有月份总天数,然后加具体日期
#include <stdlib.h>
#include <stdio.h>
int main()
{
int month_days[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
int year, month, day;
while (scanf("%d %d %d\n", &year, &month, &day) != EOF)
{
int days = 0;
if (month >= 2)
days = month_days[month - 2] + day;
else
days = day;
if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)&&(month>2))
days++;
printf("%d\n", days);
}
return 0;
}
//稍微复杂的思路:利用大小月特点,直接通过函数进行计算,但月份只有12个,计算起来并不多,因此用上面的方法也很好
//如果换到其他计算量大的问题背景中,可以采取这个思路
#include <stdio.h>
//闰年
int Isr(int m,int d)
{
if(m==1)
{
return d;
}
else if(m==2)
{
return 31+d;
}
else if(m%2==0&&m<10)
{
return (m-1)*30+m/2-1+d;
}
else if(m%2!=0&&m<9)
{
return (m-1)*31+d-m/2-1;
}
else if(m%2!=0&&m>8)
{
return (m-1)*31+d-m/2;
}
else
{
return (m-1)*31+d-m/2;
}
}
//平年
int Isp(int m,int d)
{
if(m==1)
{
return d;
}
else if(m==2)
{
return 31+d;
}
else if(m%2==0&&m<9)
{
return (m-1)*30+m/2-2+d;
}
else if(m%2!=0&&m<9)
{
return (m-1)*31+d-m/2-2;
}
else if(m%2!=0&&m>8)
{
return (m-1)*31+d-m/2-1;
}
else
{
return (m-1)*31+d-m/2-1;
}
}
int main()
{
int y=0,m=0,d=0;
scanf("%d %d %d",&y,&m,&d);
if(((y%4==0)&&(y%100!=0))||((y%100==0)&&(y%400)==0))
{
printf("%d\n",Isr(m,d));
}
else
{
printf("%d\n",Isp(m,d));
}
return 0;
}


查看7道真题和解析