题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
求注释本图片的代码,尽量详细,谢谢!
1 public static void main(String[] args) { 2 // 记录每月有多少天,数组脚标从0开始,因此第一位用0占位。 3 // 除了二月份是28天或29天不确定,其余月份有多少天都已经确定。 4 // 占位 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 5 int m[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 6 7 // 高斯出生日期,1777年4月30日。 8 int year = 1777, mon = 4, day = 30; 9 10 // 天数n = 8113 + 生日中的天数 - 出生当天。 11 int n = 8113 + day - 1; 12 13 // 从1777年4月1日开始推算,过了n天,当前日期是多少。 14 15 // 当n的天数,大于当前遍历月的天数时,说明当前月份还可以增加。 16 // 直到n的天数不足一月的时候,那么n的值就是当前日期中的日的值。 17 while (n > m[mon]) { 18 // n - 当前遍历月份的天数 19 n -= m[mon]; // 相当于 n = n - m[mon]; 20 // 先将月份加一,但是月份不能超过12,所以和13取余运算,保证月份不超过12。 21 mon = ++mon % 13;// 相当于mon++; mon = mon % 13; 22 // 如果是一月份了,说明又过了一年 23 if (mon == 1) { 24 // 年份加一 25 year++; 26 // 如果是闰年 27 if (run(year)) { 28 // 二月有29天 29 m[2] = 29; 30 } else { // 不是闰年 31 // 二月有28天 32 m[2] = 28; 33 } 34 } 35 } 36 // 输出年月日。中间的0是为了保证输出形如:1777-04-30的效果。这种做法不正确。 37 System.out.println(year + "" + 0 + mon + "-" + n); 38 } 39 40 /** 41 * 判断是否为闰年 42 * @param y 年 43 * @return 44 */ 45 private static boolean run(int y) { 46 // 满足如下两种情况其中一种,则是闰年: 47 // 1.能被4整除,且不能被100整除。 48 // 2.能被400整除。 49 if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) { 50 return true; 51 } 52 return false; 53 }
1 public static void main(String[] args) { 2 Calendar calendar = Calendar.getInstance(); 3 calendar.set(1777, 4-1, 30); 4 Date date = calendar.getTime(); 5 date = DateUtils.addDays(date, 8113); 6 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 7 String dateStr = sdf.format(date); 8 System.out.println(dateStr);// 1799-07-17 9 }
嗯,注释很清楚,可算弄明白是怎么回事了,谢谢你!
@爱编程1314: 提个建议啊,下次提问题记得贴代码,别贴图片。
@巧克力键盘: 呵呵,我知道您老人家手打有点累,辛苦了,下次一定贴代码!
@巧克力键盘: 你下面那段代码是什么意思啊,我粘贴复制提示有错误啊,是不是没贴完全啊
@爱编程1314: 评论中的代码是这道题的简便算法,使用了开源工具类DateUtils。如果没有导入包,是会报错的。等你以后系统了学习之后,再使用吧。
@巧克力键盘: 嗯,好的,我会好好学的。都说博客园里都是深山老林的高人,呵呵!
好一个java入门人