日期类模板 , 该日期是第几天,第几天的日期,两个日期的差 ,一个日期的n天之后的日期...
来源:互联网 发布:淘宝汉服商家那家正规 编辑:程序博客网 时间:2024/06/05 23:32
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2315
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=10498
以上是验证模板的题目
/* * 模板有风险,使用需谨慎 , * 在获取某年的天数时,可以打表 * */// 声明struct Time ;inline bool IsrunYear( int const & year );// 输入一个日期, 返回是这年的第几天int Cnt_day_of_year( Time const& time);// 得到这年的第几天这个日期Time Time_of_nTH_day(int const&year,int days);//获取某年的天数inline int getdayOFyear( int y );//计算两个日期相差的天数int Cnt_day_between_Times(Time t1,Time t2);// 一个日期n天后的日期Time next_Days_after_Time( Time time,int days );// 1.是闰年 0.是平年extern int dayOFmonth[2][13] ;#include <cstdio>#include <iostream>using namespace std;struct Time{ int year,month,day; Time(int y = 0,int m = 0,int d = 0) : year(y),month(m),day(d){}};inline bool IsrunYear( int const & year ){ return ( (year % 4 == 0 && year % 100 != 0 ) || ( year % 400 == 0 ) );}// 1.是闰年 0.是平年int dayOFmonth[2][13] = { // 1 2 3 4 5 6 7 8 9 10 11 12{0, 31,28,31,30,31,30,31,31,30, 31,30,31},{0, 31,29,31,30,31,30,31,31,30, 31,30,31}};// 输入一个日期, 返回是这年的第几天int Cnt_day_of_year( Time const& time){ int days(0); bool flag = IsrunYear(time.year); for (int i = 1;i < time.month;++i ) days += dayOFmonth[flag][i]; days += time.day; return days ;}// 得到这年的第几天这个日期Time Time_of_nTH_day(int const&year,int days){ Time time(year,1,1); bool flag = IsrunYear( year ); for ( int i = 1; i <= 12;++i ){ if( days <= dayOFmonth[flag][i]) break; time.month++; days -= dayOFmonth[flag][i]; } time.day = days; return time;}// 这段优化基本没用int days_Of_year[2222]={0};inline void sieve(){ for (int i = 1800 ; i <= 2200;++i ) days_Of_year[i] = IsrunYear(i) ? 366 : 365;}//获取某年的天数inline int getdayOFyear( int y ){ return IsrunYear( y ) ? 366 : 365;}//计算两个日期相差的天数int Cnt_day_between_Times(Time t1,Time t2){ //2010/3/20-2010/1/10=69 //printf("%d/%d/%d-%d/%d/%d=",t1.year,t1.month,t1.day,t2.year,t2.month,t2.day); int d1 = 0,d2 = 0; bool flag1 = IsrunYear( t1.year ) , flag2 = IsrunYear( t2.year ) ; if ( t1.year == t2.year ) { if (t1.month == t2.month ) return t1.day-t2.day; else{ d1 = t1.day + dayOFmonth[flag1][t2.month] - t2.day; for (int i = t2.month+1 ; i <= t1.month-1;++i) d1 += dayOFmonth[flag1][i]; return d1; } }else{ d1 = t1.day; for(int i = 1;i <= t1.month-1;i++) d1 += dayOFmonth[flag1][i]; d2 = dayOFmonth[flag2][t2.month] - t2.day; for (int i = 12;i >= t2.month+1;--i) d2 += dayOFmonth[flag2][i]; for (int y = t2.year+1;y <= t1.year-1;++y) d2 += getdayOFyear( y ); return d1+d2; }}// 一个日期n天后的日期Time next_Days_after_Time( Time time,int days ){ Time ans(0,0,0); int CntDay = Cnt_day_of_year( time ); int leave = getdayOFyear(time.year) - CntDay ; if( days <= leave ){ ans = Time_of_nTH_day( time.year, CntDay + days ); }else { days -= leave , time.year++; while( days > days_Of_year[time.year] ) days -= days_Of_year[time.year] , time.year++; ans = Time_of_nTH_day(time.year,days); } return ans;}
0 0
- 日期类模板 , 该日期是第几天,第几天的日期,两个日期的差 ,一个日期的n天之后的日期...
- js输入一个日期判断该日期是该年的第几天
- C语言 从键盘输入一个日期计算该日期是该年的第几天
- 获取第几天时间的日期
- 日期添加几天的解决方法
- 获取未来几天的日期
- 输入一个日期,判断是当年的第几天
- 判断一个日期是一年的第几天
- 一个日期处于该年的第几天
- 输入一个日期判断是这一年的第几天?
- 第十七周 项目-4.日期结构体(计算该日是该年的第几天)
- 第十七周项目四日期结构体(1)该日是该年的第几天
- 定义一个结构体类型表示日期(年、月、日)。main中输入一个日期,计算该日期是当年的第几天。
- C语言编程题,给定一个日期,输出这个日期是该年的第几天
- 给定一个日期,输出这个日期是该年的第几天。 C语言来做
- 给定一个日期,输出这个日期是该年的第几天
- 输入一个日期,输出这个日期是所在年的第几天
- Java:给定一个日期,输出这个日期是该年的第几天。
- Android自定义View之Activity页面的组成
- 这是个类和对象
- 513前端学习资料----dojo入门(1)
- 集合1
- 树莓派连接手机
- 日期类模板 , 该日期是第几天,第几天的日期,两个日期的差 ,一个日期的n天之后的日期...
- 时间格式类
- 数据结构实验之查找三:树的种类统计
- 集合List,ArrayList,Collection第15天
- navicat for mysql ,从远程数据库中到数据到本地数据库(笨办法)
- JAVA WEB 学习笔记 Idea下常用配置-Hello Servlet。
- 13、(知识篇)Spring使用xml配置bean02
- codeforces 358
- 时间复杂度