题目:
Consider the problem of date conversion, from day of month to day of year and vice versa.For example, March 1 is the 60th day of a non-leap year, and the 61st day of a leap year.
#include <stdio.h>
int day_of_year(int year,int month,int day);
void month_day(int year,int yearday,int *mm,int *dd);
void main(){
int y = 2015;
int m = 2;
int d = 1;
int yd = 32;
int mm = 0;
int dd = 0;
printf("%d",day_of_year(y,m,d));
month_day(y,yd,&mm,&dd);
printf("%d%d",mm,dd);
}
int non_leap_year[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int leap_year[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
static int *day_of_month[]={non_leap_year,leap_year};
int day_of_year(int year,int month,int day){
int leap = year%4 == 0&&year%100 != 0||year%400 == 0;
for(int i = 1;i < month;i++){
day += day_of_month[leap][i];
}
return day;
}
void month_day(int year,int yearday,int *mm,int *dd){
int i;
int leap = year%4 == 0&&year%100 != 0||year%400 == 0;
for(i = 1;yearday > day_of_month[leap][i];i++){
yearday -= day_of_month[leap][i];
}
*mm = i;
*dd = yearday;
}