1506 - 打印日期

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

给出年分m和一年中的第n天,算出第n天是几月几号。

题目输入

输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。

题目输出

可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。

输入/输出样例

输入格式

2013 60
2012 300
2011 350
2000 211

输出格式

2013-03-01
2012-10-26
2011-12-16
2000-07-29

C语言解答

#include <stdio.h>

int biao[13][2]={0,0,31,31,59,60,90,91,120,121,151,152,181,182,212,213,243,244,273,274,304,305,334,335,365,366};

int leap(int y)
{
	return((y%4==0&&y%100!=0)||y%400==0);
}

int main()
{
	int y,n,k,d,m,i;
	while(scanf("%d%d",&y,&n)!=EOF)
	{
		if(leap(y))
			k=1;
		else k=0;
		for(i=1;i<=12;i++)
			if(n<=biao[i][k]&&n>biao[i-1][k])
				m=i;
		d=n-biao[m-1][k];

			printf("%04d-%02d-%02d\n",y,m,d);
	}
}

C++解答

#include<stdio.h>

int main()
{
	int y,n,m[13][2]={0,0,
					  1,1,
					  32,32,
					  60,61,
					  91,92,
					  121,122,
					  152,153,
					  182,183,
					  213,214,
					  244,245,
					  274,275,
					  305,306,
					  335,336};
	int k,i,M,D;
	while(scanf("%d%d",&y,&n)!=EOF)
	{
		k=0;
		if((y%4==0&&y%100!=0)||(y%400==0))
			k=1;
		for(i=1;i<=12;i++)
		{
			if(n<m[i][k])
			{
				M=i-1;
				D=n-m[i-1][k]+1;
				break;
			}
			else if(n==m[i][k])
			{
				M=i;
				D=1;
				break;
			}
		}
		if(i>12)
		{
			M=12;
			D=n-m[12][k]+1;
		}
		printf("%04d-%02d-%02d\n",y,M,D);
	}
	return 0;
}