日期计算

问题描述
  已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况。尤其是逢百年不闰,逢400年闰的情况。
输入格式
  输入只有一行
  YYYY MM DD
输出格式
  输出只有一行
  W
数据规模和约定
  1599 <= YYYY <= 2999
  1 <= MM <= 12
  1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
  1 <= W <= 7,分别代表周一到周日
样例输入
2011 11 11
样例输出
5
#include<iostream>
using namespace std;
//计算当前日期到1599年1月1日的天数 
int Get_SumDay(int y,int m,int d)
{
	int rt=0,i; 
	//计算年
	for(i=1599;i<y;i++)
	{
		if(i%4==0&&i%100!=0||i%400==0)
		{
			rt += 366;
		}else{
			rt += 365;
		}
	}
	//计算月
	for(i=1;i<m;i++)
	{
		if(i==4||i==6||i==9||i==11)
		{
			rt+=30;
		}else if(i==2){
			if(y%4==0&&y%100!=0||y%400==0)
			{
				rt += 29;
			}else{
				rt += 28;
			}
		}else{
			rt+=31; 
		} 
	}
	//计算日
	rt+=d-1;
	return rt;
}
int main()
{
	int y,m,d,a,ans;
	cin>>y>>m>>d;
	a=Get_SumDay(y,m,d)-Get_SumDay(2011,11,11);
	if(a>=0)
	{
		ans=(a+5)%7;
	}else{
		ans=(a+5)%7;
		ans=(ans+7)%7;
	}
	if(ans==0)ans=7;
	cout<<ans<<endl;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值