题解 | #计算日期到天数转换#
计算日期到天数转换
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; }