问题描述:
给定一个日期,输出这个日期是该年的第几天。
输入:
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见输入样例 ,另外,可以向你确保所有的输入数据是合法的。
输出:
对于每组输入数据,输出一行,表示该日期是该年的第几天。
输入样例:
1985/1/20
2006/3/12
输出样例 :
20
71
代码(暴力累加版)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int y,m,d;
int i,sum;
while(scanf("%d/%d/%d",&y,&m,&d)!=EOF){
sum=0;
for(i=0;i<=m;i++){
switch(i){
case 1:sum+=d;break;
case 2:sum+=31;break;
case 3:{
if(y%4==0||(y%100!=0&&y%400==0)) sum+=29;//判断二月份天数
else sum+=28;
break;
}
case 5:sum+=30;break;
case 6:sum+=31;break;
case 7:sum+=30;break;
case 8:sum+=31;break;
case 9:sum+=31;break;
case 10:sum+=30;break;
case 11:sum+=31;break;
case 12:sum+=30;break;
}
}
printf("%d\n",sum);
}
return 0;
}
代码(机智函数版,非常简短)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int year(int n){
if(n%4==0||(n%100!=0&&n%400==0)) return 1;
else return 0;
}
int main()
{
int y,m,d,sum,i;
int month[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};//数组第一个下标即为平闰年函数的返回值
while(scanf("%d/%d/%d",&y,&m,&d)!=EOF){
sum=0;
for(i=0;i<m-1;i++){
sum+=month[year(y)][i];//将求年份是平年还是闰年与月份数组联系到一起
}
sum+=d;
printf("%d\n",sum);
}
return 0;
}