【九度oj】1070题(修改自王道机试指南)




# include <stdio.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 Day;
	int Month;
	int Year;
	void nextDay(){//这个函数是计算下一天的日期 
		Day++;
		if(Day>dayOfMonth[Month][ISYEAP(Year)]){
			//若自增的日数超过了当月的最大日数
			Day = 1;
			Month++;//进入下一月 
			if(Month>12){//月数大于12 
				Month = 1;
				Year++;//进入下一年 
			} 
		} 
	} 
};

int buf[3001][13][32];//创建一个三维数组

int Abs(int x){//求绝对值的函数 
	return x<0?-x:x;
} 

int  main(){
	Date tmp;
	int cnt=0;//计数器计算天数
	tmp.Day=1;
	tmp.Month = 1;
	tmp.Year = 0;//初始化日期为0年1月1日 
	while(tmp.Year !=3001){//日期不超过5000年 
		buf[tmp.Year][tmp.Month][tmp.Day] = cnt;
						//将该日与0年1月1号天数差保存起来
		tmp.nextDay();  //计算下一天日期
		cnt++;//日期每向前走一个计数器自动+1 
	} 
	
	int d1, m1, y1;
	
	while(scanf("%d%d%d", &y1, &m1, &d1)!=EOF){
		printf("%d\n", Abs(buf[y1][m1][d1] -buf[y1][1][1]) + 1 );
				//用预处理的数据计算两日期的差值,注意需对其求绝对值 
	} 
	
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值