【案例描述】
以下程序輸入年月日,輸出該日是本年中的第幾天。請將代碼補充完整。
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);
}