CCF认证 201509-2 日期计算 100分(2种方法)C++

试题编号: 201509-2
试题名称: 日期计算
时间限制: 1.0s
内存限制: 256.0MB
问题描述:

问题描述

  给定一个年份y和一个整数d,问这一年的第d天是几月几日?
  注意闰年的2月有29天。满足下面条件之一的是闰年:
  1) 年份是4的整数倍,而且不是100的整数倍;
  2) 年份是400的整数倍。

输入格式

  输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
  输入的第二行包含一个整数dd在1至365之间。

输出格式

  输出两行,每行一个整数,分别表示答案的月份和日期。

样例输入

2015
80

样例输出

3
21

样例输入

2000
40

样例输出

2
9

C++实现:

方法一:

解题技巧:将每个月的天数存放在一个数组里

#include<iostream>
using namespace std;

int main()
{
	int y,d,month,day,sum=0;
	int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	cin>>y;
	if( y>1899 && y<2016 )
		cin>>d;
	else
		cout<<"error!"<<endl;
	day=d;
	if((y%4==0&&y%100!=0)||(y%400==0))    //闰年
		m[2]++;

	for(int i=0;i<13;i++)
	{
		sum+=m[i];  
		if(d<=sum)
		{	
			month=i;
			break;
		}
		day-=m[i];
	}
	cout<<month<<endl<<day<<endl;
	return 0;
}

方法二

如果考试时想不出来做题的技巧,可以采用这种笨办法,自己笔算,然后直接输入代码所需的数值

#include<iostream>
using namespace std;

int main()
{
	int y,d,month,day;
	cin>>y;
	if(y>1899&&y<2016)
		cin>>d;
	else
		cout<<"error!"<<endl;
	if(d<32)    //第一个月
	{	month=1;day=d;}
	else if((y%4==0&&y%100!=0)||(y%400==0))    //闰年
	{
		if(d<61)
		{month=2;day=d-31;}
		else if(d<92)
		{month=3;day=d-60;}
		else if(d<122)
		{month=4;day=d-91;}
		else if(d<153)
		{month=5;day=d-121;}
		else if(d<183)
		{month=6;day=d-152;}
		else if(d<214)
		{month=7;day=d-182;}
		else if(d<245)
		{month=8;day=d-213;}
		else if(d<275)
		{month=9;day=d-244;}
		else if(d<306)
		{month=10;day=d-274;}
		else if(d<336)
		{month=11;day=d-305;}
		else if(d<367)
		{month=12;day=d-335;}
	}
	else    //平年
	{
		if(d<60)
		{month=2;day=d-31;}
		else if(d<91)
		{month=3;day=d-59;}
		else if(d<121)
		{month=4;day=d-90;}
		else if(d<152)
		{month=5;day=d-120;}
		else if(d<182)
		{month=6;day=d-151;}
		else if(d<213)
		{month=7;day=d-181;}
		else if(d<244)
		{month=8;day=d-212;}
		else if(d<274)
		{month=9;day=d-243;}
		else if(d<305)
		{month=10;day=d-273;}
		else if(d<335)
		{month=11;day=d-304;}
		else if(d<366)
		{month=12;day=d-334;}
	}
	cout<<month<<endl<<day<<endl;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章