基姆拉尔森计算公式(计算某天是星期几的模板)

What day is it

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4916    Accepted Submission(s): 1446


Problem Description
Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it is ?
 

Input
There are multiply cases.
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
 

Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
 

Sample Input
  
  
2007 11 17
 

Sample Output
  
  
Saturday
 
思路:

                直接运用基母拉尔森公式求解,快速方便

代码:

 

#include<iostream>
#include<cstdio>
#include<map>
#include<math.h>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;

int weekday(int year,int month,int day)
{
    int w;
    if(month < 3)
    {
        month += 12;
        --year;
    }
    w = (day + 1 + 2 * month + 3 * (month + 1)/5 + year + year / 4 - year / 100 + year / 400) % 7;
    return w;
}



int main()
{
    int year, month, day;
    while(scanf("%d%d%d",&year,&month,&day) != EOF)
    {
        if(year % 4 == 0 && year %100 != 0 || year % 400 == 0)
        {
            if(month == 2 && day > 29)
            {
                printf("illegal\n");
                continue;
            }
        }
        else
        {
            if(month == 2 && day > 28)
            {
                printf("illegal\n");
                continue;
            }
        }
        if(month == 0 || day == 0)
        {
            printf("illegal\n");
            continue;
        }
        if(month == 4 || month == 6 || month == 11 || month == 9)
        {
            if(day > 30)
            {
                printf("illegal\n");
                continue;
            }
        }
        int w = weekday(year,month,day);
        if(w == 0)
            printf("Sunday\n");
        if(w == 1)
            printf("Monday\n");
        if(w == 2)
            printf("Tuesday\n");
        if(w == 3)
            printf("Wednesday\n");
        if(w == 4)
            printf("Thursday\n");
        if(w == 5)
            printf("Friday\n");
        if(w == 6)
            printf("Saturday\n");

    }
    return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值