【案例描述】
以下程序输入年月日,输出该日是本年中的第几天。请将代码补充完整。
main()
{ struct{int y,m,d;}( );
int n;
scanf("%4d%2d%2d",&day.y,&day.m,&day.d);
n=day.d+(day.m-1)*30;
n+=day.m/2+(day.m==9)+(day.m==11);
if(day.m>2)
if(day.y%400==0||(day.y%4==0 && day.y%100))( );else ( );
printf("%d",n);}
【案例分析】
以上代码的求解思路是:
1、先假定每月30天,计算总天数:n=day.d+(day.m-1)*30
2、再加上大月天数:day.m/2+(day.m==9)+(day.m==11)
3、再根据是否为闰年修正2月的天数。
【参考代码】
main()
{ struct{int y,m,d;}day;
int n;
scanf("%4d%2d%2d",&day.y,&day.m,&day.d);
n=day.d+(day.m-1)*30;
n+=day.m/2+(day.m==9)+(day.m==11);
if(day.m>2)
if(day.y%400||(day.y%4==0 && day.y%100))n-=1;else n-=2;
printf("%d",n);
}