第几天?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 96054 Accepted Submission(s): 36129
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20 2006/3/12
Sample Output
20 71
Author
lcy
日期转换的题,要考虑闰年:
口诀:四年一闰;百年不闰;四百年再闰
利用switch语句自动累加的原理写的:
#include<cstdio>
int main()
{
int year,mon,day,count=0;
while(scanf("%d/%d/%d",&year,&mon,&day)!=EOF)
{
switch (mon)
{
case 12:count+=30;
case 11:count+=31;
case 10:count+=30;
case 9:count+=31;
case 8:count+=31;
case 7:count+=30;
case 6:count+=31;
case 5:count+=30;
case 4:count+=31;
case 3:count+=28;
case 2:count+=31;
case 1:;
count+=day;
if(mon>2&&year%4==0&&year%100!=0||year%400==0)//此些情况天数加一
count++;
}
printf("%d\n",count);
count=0;
}
return 0;
}
日期转换有时候是一些题目的基础,可以写成子函数直接备用:
判断闰年的函数:一般考虑到400年就可以了
int isRunNian(int year){
int result;
if(year%400 == 0 ||(year%4==0 && year%100!=0))
{
result = 1;
} else{
result = 0;
}
return result;
}
日期换算天数的子函数(要调用上一个):
int DiJiTian(int year, int month, int day){
int result = 0;
for(int i = 1; i < month; i++){ //step1
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
result += 31;
} else if (i == 4 || i ==6 || i == 9 || i==11){
result += 30;
} else if(i == 2){
if(isRunNian(year))){
result += 29;
} else {
result += 28;
}
}
}
result += day; //step2
return result;
}