为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA算法题

JAVA算法题

米琪卡哇伊 2018-12-07 02:01:04
题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日。 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。 高斯获得博士学位的那天日记上标着:8113 请你算出高斯获得博士学位的年月日。 提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21   求注释本图片的代码,尽量详细,谢谢!
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

 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     }
查看完整回答
反对 回复 2018-12-16
?
RISEBY

TA贡献1856条经验 获得超5个赞

好一个java入门人

查看完整回答
反对 回复 2018-12-16
  • 2 回答
  • 0 关注
  • 572 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信