方法一:采用递归调用
int YearMon_Day(int year,int month)
int days;
if(year < 1||month < 1||month > 12) { return -1; }
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days = 31; break;
case 2: days = 28; break;
case 4:
case 6:
case 9:
case 11: days = 30;break;
}
if( month == 2 && (year%4 == 0 && year % 100 !=0 || year%400 == 0)) { days = 29; }
return days;
}
int YearMonDay_To_Total(int year,int month,int day)
{
if(year < 1|| month < 1||month > 12||day < 1||day > YearMon_Day(year,month))
{
return -1;
}
int total = 0;
int i;
for(i = 1 ;i < month;++i)
{
total = YearMon_Day(year,i) + total;
}
return total + day;
}
void main()
{
int year = 0;
int month = 0;
int day = 0;
int total = -1;
scanf("%d %d %d",&year,&month,&day);
total = YearMonDay_To_Total(year,month,day);
if(total != -1)
{
printf("%d \n",total);
}
else
{
printf("input error: \n");
}
}
方法二:采用switch()循环
int main(){
int year,month,day;
int days = 0;
int sum = 0;
scanf("%d %d %d",&year,&month,&day);
if(year < 1||month < 0||month > 12||day < 0) return 0;
switch(month)
{
case 0:days = 0; break;
case 1:days = day; break;
case 2:days = 31; break;
case 3:days = 60; break;
case 4:days = 91; break;
case 5:days = 121; break;
case 6:days = 152; break;
case 7:days = 182; break;
case 8:days = 213; break;
case 9:days = 244; break;
case 10:days = 274; break;
case 11:days = 305; break;
case 12:days = 335; break;
}
if((year%4 ==0&&year%100 !=0||year%400 == 0)||month > 2)
{
days = days -1;
}
sum = days + day;
printf("%d \n",sum);
}
方法三:查表法
struct Date
{
int year;
int day;
int month;
};
int main()
{
Date date;
int days = 0;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("Input year,month and day:\n");
scanf("%d %d %d",&date.year,&date.month,&date.day);
int i = 0;
for(;i < date.month; i++)
{
days = month[i]+date.day;
}
if(date.month > 2 && (date.year % 4 == 0 && date.year % 100 != 0 ||date.year % 400 == 0))
{
days = days + 1;
}
printf("%d \n",days);
return 0;
}