程序设计C 实验二 题目三 计算生日是星期几(0078)

Description

输入一个日期,包括年、月、日。(一组测试数据)

Input

输出这个日期是星期几。

Output
1
2
3
1 1 1
2 1 1
2006 7 10
Sample Input
1
2
3
Monday
Tuesday
Monday
Sample Output

1、 已知公元1 年1 月1 日是星期一 2、 算法提示:如果输入的是2006 年3 月12 日,计算方法是 (1) 先计算从公元0001 年初(0001-1-1)到2005 年末(2005-12-31)共多少天,注意其中 有闰年,闰年是366 天,平年是365 天。闰年的判断条件满足(见教材例3.8 题): (( year%4==0 && year%100!=0 )||(year%400==0)) (2) 然后再计算2006 年1 月1 日到2006-3-12 是多少天。注意同样判断本年度是否闰年, 即二月份是28 天还是29 天。 (3) 上述两部分相加即从公元0001 年初(0001-1-1)到2006 年末(2006-3-12)的天数, 用该天数模7(total%7)即得到星期数。

#include <stdio.h>
 
int main() {
    int year = 0,month = 0,day = 0;
    int leap = 0,noleap = 0;
    int days_1 = 0,days_2 = 0;
    int w = 0,days = 0;
    scanf("%d %d %d",&year,&month,&day);
    int i;
    for (i = 1;i < year;i++) {  //判断是否闰年
        if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
            leap ++;
 
        } else {
            noleap ++;
 
        }
    }
    days_1 = leap * 366 + noleap * 365;
    //判断year年是否闰年
    int j;
    for (j = 1;j < month;j++) {
        switch (j) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: days_2 += 31;break;
            case 4:
            case 6:
            case 9:
            case 11:days_2 += 30;break;
            case 2: if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) 
                        days_2 += 29;
                    else
                        days_2 += 28;
                    break;
        }
    }
    days = days_1 + days_2 + day;
     
    w = days % 7;
    switch (w) {
    case 0:printf("Sunday\n");break;
    case 1:printf("Monday\n");break;
    case 2:printf("Tuesday\n");break;
    case 3:printf("Wednesday\n");break;
    case 4:printf("Thursday\n");break;
    case 5:printf("Friday\n");break;
    case 6:printf("Saturday\n");break;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/Aimee_ice/article/details/78283921