http://acm.hdu.edu.cn/showproblem.php?pid=1201
我还以为这是一道脑筋急转弯的题QAQ,
AC代码如下:
1 #include <stdio.h> 2 int leapyear(int year) 3 { 4 if(year%4==0 && year%100!=0 || year%400==0) return 1; 5 else return 0; 6 } 7 //自定义函数,判断年份是闰年还是平年 8 9 int main() 10 { 11 int t,y,year,month,day; 12 int sum; 13 //变量sum统计从出生到18岁所经过的天数 14 15 scanf("%d",&t); 16 while(t--) 17 { 18 scanf("%d-%d-%d",&year,&month,&day); 19 //输入生日的年,月,日 20 if( month==2 && day==29) printf("-1\n"); //2月29日出生,则输出-1 21 else 22 { 23 sum=0; 24 if(month>=3) //月份大于2,该年后一年的平或润 决定过一岁度过的天数 25 { 26 for(y=year+1;y<=year+18;y++) //注意for循环中的范围,都是向后移一年 27 { 28 if(leapyear(y)) sum+=366; 29 else sum+=365; 30 } 31 } 32 else if(month<=2) //月份小于等于2,该年的平或润 决定过一岁度过的天数 33 { 34 for(y=year;y<=year+17;y++) //注意for循环中的范围,当前年份 35 { 36 if(leapyear(y)) sum+=366; 37 else sum+=365; 38 } 39 } 40 printf("%d\n",sum); 41 } 42 } 43 return 0; 44 }