日期练习

九度1070

题目描述:

输入年、月、日,计算该天是本年的第几天。

输入:

包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。

输出:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
样例输入:
1990 9 20
2000 5 1
样例输出:
263
122
#include<stdio.h>
#include<string.h>
#define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0
int dayOfMonth[13][2]={
	0,0,
	31,31,
	28,29,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31
};
//定义日期类
struct Date{
	int Year;
	int Month;
	int Day;
	void nextday(){
		Day++;
		if(Day>dayOfMonth[Month][ISYEAP(Year)])
		{
			Day=1;
			Month++;
			if(Month>12)
			{
				Month=1;
				Year++;
			}
		}
	}
};
//定义buf记录日期数
int buf[3001][13][32];

int main(int argc, char* argv[])
{
	//初始化
	Date temp;
	int count=0;
	temp.Year=0,temp.Month=1,temp.Day=1;
	while(temp.Year!=3001){
		buf[temp.Year][temp.Month][temp.Day]=count;
		temp.nextday();
		count++;
	}
	//题目程序
	int y,m,d;
	while(scanf("%d %d %d",&y,&m,&d)!=EOF)
	{
		printf("%d\n",buf[y][m][d]-buf[y][1][1]+1);
	}
	return 0;
}

九度1186

题目描述:

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

输入:

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

输出:

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

样例输入:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60
样例输出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
#include<stdio.h>
#include<string.h>
#define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0
int dayOfMonth[13][2]={
	0,0,
	31,31,
	28,29,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31,
	31,31,
	30,30,
	31,31,
	30,30,
	31,31
};
//定义日期类
struct Date{
	int Year;
	int Month;
	int Day;
	void nextday(){
		Day++;
		if(Day>dayOfMonth[Month][ISYEAP(Year)])
		{
			Day=1;
			Month++;
			if(Month>12)
			{
				Month=1;
				Year++;
			}
		}
	}
};
//定义buf记录日期数
int buf[3001][13][32];

int main(int argc, char* argv[])
{
	//初始化
	Date temp;
	int count=0;
	temp.Year=0,temp.Month=1,temp.Day=1;
	while(temp.Year!=3001){
		buf[temp.Year][temp.Month][temp.Day]=count;
		temp.nextday();
		count++;
	}
	//题目程序
	int y,m,d;
	int days;
	while(scanf("%d %d",&y,&days)!=EOF)
	{
		for(int i=1;i<13;i++)
		{
			for(int j=1;j<32;j++)
			{
				if(days==(buf[y][i][j]-buf[y][1][1]+1))
				{
					m=i,d=j;
				}
			}
		}
		printf("%04d-%02d-%02d\n",y,m,d);  //输出2000-03-04的方式%02d
	}
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值