题解 | Day of Week

Day of Week

https://www.nowcoder.com/practice/a3417270d1c0421587a60b93cdacbca0

#include <stdio.h>
#include <string.h>

int isLeapyear(int year){
    if(((year%4==0)&&(year%100!=0)) || (year%400==0)){
        return 1;
    }else{
        return 0;
    }
}

char* is_week_day(int year, char month_str[10], int day){
    int days = 0;
    char month_mapping[13][10] = {"", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    int month;
    int month_days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 
    char week_day_mapping[7][10] = {"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};
    
    // 年
    for(int i=0; i<year; i++){
        days += isLeapyear(i)==1 ? 366 : 365;
    }
    // 月
    // 转换为数字
    for(int i=1; i<=12; i++){
        if(strcmp(month_str, month_mapping[i])==0){
            month = i;
            break;
        }
    }
    // 天数累加
    for(int i=0; i<month; i++){
        if(i==2){
            days += isLeapyear(year)==1 ? 29 : month_days[i];
            continue;
        }
        days += month_days[i];       
    }
    // 天
    days += day;

    // 星期计算
    int week_day = days%7;
    return week_day_mapping[week_day];
}

int main() {
    int year1, month1, day1;
    char month1_str[10];
    while(scanf("%d %s %d", &day1, month1_str, &year1) != EOF){
        char week_day1[10];
        strcpy(week_day1, is_week_day(year1, month1_str, day1));
        printf("%s\n", week_day1);
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务