題目標(biāo)題: 高斯日記
大數(shù)學(xué)家高斯有個(gè)好習(xí)慣:無(wú)論如何都要記日記。
他的日記有個(gè)與眾不同的地方,他從不注明年月日,而是用一個(gè)整數(shù)代替,比如:4210
后來(lái)人們知道,那個(gè)整數(shù)就是日期,它表示那一天是高斯出生后的第幾天。這或許也是個(gè)好習(xí)慣,它時(shí)時(shí)刻刻提醒著主人:日子又過(guò)去一天,還有多少時(shí)光可以用于浪費(fèi)呢?
高斯出生于:1777年4月30日。 在高斯發(fā)現(xiàn)的一個(gè)重要定理的日記上標(biāo)注著:5343,因此可算出那天是:1791年12月15日。
高斯獲得博士學(xué)位的那天日記上標(biāo)著:8113
請(qǐng)你算出高斯獲得博士學(xué)位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
?
求注釋本圖片的代碼,盡量詳細(xì),謝謝!
2 回答
largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
1 public static void main(String[] args) { 2 // 記錄每月有多少天,數(shù)組腳標(biāo)從0開(kāi)始,因此第一位用0占位。 3 // 除了二月份是28天或29天不確定,其余月份有多少天都已經(jīng)確定。 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 // 天數(shù)n = 8113 + 生日中的天數(shù) - 出生當(dāng)天。 11 int n = 8113 + day - 1; 12 13 // 從1777年4月1日開(kāi)始推算,過(guò)了n天,當(dāng)前日期是多少。 14 15 // 當(dāng)n的天數(shù),大于當(dāng)前遍歷月的天數(shù)時(shí),說(shuō)明當(dāng)前月份還可以增加。 16 // 直到n的天數(shù)不足一月的時(shí)候,那么n的值就是當(dāng)前日期中的日的值。 17 while (n > m[mon]) { 18 // n - 當(dāng)前遍歷月份的天數(shù) 19 n -= m[mon]; // 相當(dāng)于 n = n - m[mon]; 20 // 先將月份加一,但是月份不能超過(guò)12,所以和13取余運(yùn)算,保證月份不超過(guò)12。 21 mon = ++mon % 13;// 相當(dāng)于mon++; mon = mon % 13; 22 // 如果是一月份了,說(shuō)明又過(guò)了一年 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 }
添加回答
舉報(bào)
0/150
提交
取消
