一年中的第几天
提示
给你一个字符串?
date
?,按?YYYY-MM-DD
?格式表示一个?现行公元纪年法?日期。返回该日期是当年的第几天。
第一版:?
int dayOfYear(char* date) {
int i=0;
int year=0,month=0,day=0;
while(date[i]!='-'){
year*=10;
year+=date[i]-'0';
i++;
}
i++;
year=(year%4==0&&year%100!=0)||year%400==0?1:0;
while(date[i]!='-'){
month*=10;
month+=date[i]-'0';
i++;
}
i++;
while(date[i]!='\0'){
day*=10;
day+=date[i]-'0';
i++;
}
if(month<3){
switch(month){
case 1:
day=day;
break;
case 2:
day+=31;
break;
}
}else{
switch(month){
case 12:
day+=30;
case 11:
day+=31;
case 10:
day+=30;
case 9:
day+=31;
case 8:
day+=31;
case 7:
day+=30;
case 6:
day+=31;
case 5:
day+=30;
case 4:
day+=31;
case 3:
day+=28+31;
break;
}
if(year){
day+=1;
}
}
return day;
}
?
?第二版;
int dayOfYear(char * date){
int year = atoi(date);
int month = atoi(date + 5);
int day = atoi(date + 8);
int amount[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
++amount[1];
}
int ans = 0;
for (int i = 0; i < month - 1; ++i) {
ans += amount[i];
}
return ans + day;
}