大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
错误解法:
package 蓝桥; import java.util.Calendar; public class 高斯的日记 { public static void main(String[] args) { // TODO Auto-generated method stub Calendar calendar=Calendar.getInstance(); calendar.set(1777, 3, 29); for (int i = 0; i < 8113; i++) { calendar.add(calendar.DATE, 1); } System.out.println(calendar.get(calendar.YEAR)+"-"+calendar.get(calendar.MONTH)+"-"+calendar.get(calendar.DATE)); //System.out.println(calendar); } }
通过date API的方式来做是错误的因为date api是从1970年开始的
分割线
最近偶然发现 java8 有了新的日期api localdate 使这题变的特别简单
import java.time.LocalDate; public class 高斯的日记 { public static void main(String[] args) { LocalDate date=LocalDate.of(1791,12,15); for (int i = 5343; i < 8113; i++) { date=date.plusDays(1); } System.out.println(date); } }
答案:1799-07-16
//分割线
不用日期API的解法:
package 蓝桥; import java.util.Calendar; public class 高斯的日记 { static int year=1777,month=4,data=30; public static void main(String[] args) { // TODO Auto-generated method stub for (int i = 1; i < 8113; i++) {//因为高斯把出生标为第一天 dateadd(); } System.out.println(year+"-"+month+"-"+data); } public static void dateadd() { ++data; if ((year%4==0&&year%100!=0)||year%400==0) { if (month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if (data==32) { month++;data=1; if (month==13) { year++; month=1; } } } else if (month==2) { if (data==30) { month++;data=1; } } else { if (data==31) { month++;data=1; } } } else { if (month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if (data==32) { month++;data=1; if (month==13) { year++; month=1; } } } else if (month==2) { if (data==29) { month++;data=1; } } else { if (data==31) { month++;data=1; } } } } }