算法笔记3.4日期处理
2018-04-04 17:44
323 查看
package 日期处理;
/* * 有两个日期,求这两个日期间的 天数。[注]:如果两个日期是连续的,则规定他们之间的天数为两天。 * 如,输入: 20130101 20130105 * 输入格式: yyyymmdd * 输出 5 */ import java.util.*; public class Text { public static void main(String[] args){ //输入日期 /* int time1=new Scanner(System.in).nextInt(); int time2=new Scanner(System.in).nextInt(); */ //做测试 int time1=20131001,time2=20131005; //分大小 if(time1>time2){int temp=time1;time1=time2;time2=temp;} //取日期 int y1=time1/10000,m1=time1/100%100,d1=time1%100; int y2=time2/10000,m2=time2/100%100,d2=time2%100; //定规则 int a[][]={{0,1},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30}, {31,31},{31,31},{30,30},{31,31},{30,30},{31,31}}; int count=1;//看[注]。 //问题本身 while(d1<d2||m1<m2||y1<y2){ d1++; if(d1==a[m1][leap_year(y1)]+1){ m1++;d1=1; } if(m1==13){ y1++;m1=1; } count++; } System.out.println("日期差为:"+count); } //判润年 public static int leap_year(int y1){ if((y1%100!=0&&y1%4==0)||y1%400==0) return 1; return 0; } }如果我是新手,如何才能想到问题的关键?重复读问题,想自己想的解决该问题的时候是如何想的?
例如,我自己想的时候便是数数。从一个日期出发,开始计数,直到碰见目标日期(日期相同)为止。
立即从上面的想法推:
两个日期必有一大一小,实际输入的时候,一个把小的放在前面(time1),作为数数的基点。
两个日期不一样,一定是y或m或r的其中至少一个不一样。
只要日期不一样,立即将按规则将日期做累加。
故只要当前的y||m||d,与目标的y||m||d不一样,就把日期按规则累加。
下面讨论累加规则(很简单,注意细节jiuok):
核心:当前你正在数的那个日期的d,再加一次,如果超过了这个日期所在的月份的d,就把月份进位。(如2.[28](d1)+1=3.1.(平年))
工具:二位数组。a[i][j]。为什么不用一维?因为平年和闰年的2月的日期有差别。
使用:由核心的说明可知,用i这个维度表示当前月,用j这个维度表示2月之间d的差别(j=0||1)。那么a[m][leap_year]的值就表示了当前的d。
相关文章推荐
- R语言学习笔记——日期时间处理
- python学习笔记十五:日期时间处理笔记
- JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件
- Android开发笔记(五)日期的处理
- OpenCV 2 学习笔记(8): 利用邻域处理图像与简单的算术图像处理算法:图像滤波与加权和
- oracle笔记3--oracle日期的处理
- 编程珠玑 3.4编写 处理日期问题的函数
- Flex与As3学习笔记之:Part 3 函数参数、字符串处理、日期与时间类型
- 备战考研算法笔记(一) 字符串处理
- 算法笔记_221:串的简单处理(Java)
- 关于设计:Actionscript 有关键盘事件、处理日期时间、文字与数字处理笔记
- IOS开发笔记-字符串转换为日期时间存在时差问题的处理
- 【算法学习笔记】50.字符串处理 SJTU OJ 1361 丁姐的周末
- 【算法学习笔记】84.序列DP 松弛+代价处理 CODE_VS 1048 石子归并
- 超实用的python日期处理笔记
- 算法笔记-codeup1928-日期差值
- python学习笔记(excel中处理日期格式)
- serv-u 到期自动禁用或删除帐户的日期处理算法
- C#数字图像处理算法学习笔记(二)--点运算与直方图
- Oracle Database 11g SQL 开发指南学习笔记:日期、时间的存储和处理