目录
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777 年 4月30 日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791 年 12 月 15 日。
高斯获得博士学位的那天日记上标着:8113。
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-ddy, 例如:1980-03-21。
题目分析:
通过给定的天数,1791年12月15日可以得知是高数日期的第5343天,这个数字不方便计算,我们往后推几天,到1792年1月1日,这样高数日期就变成了5343+16天。这样刚好到达一个新的年份。这样8113-(5343+16)之后,就是我们要找到的日期。
我们通过判断1792年是不是闰年的方法,来选择减去366 or 365天的日期,直到日期少于365。每减去一个366 or 365就多加一年,这样当日期少于365的时候,年份就确定下来了。
之后我们输出一下年份,就能看到这个年份是不是闰年。然后从1月开始,每个月减去这个月相对应的天数,直到天数小于30(这个年份不是闰年)。
这样年份,月份,天数都得到了,我们只需要输出查看一下年份、月份、天数,然后拼接输出即可。
Java:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
//从1792年1月1日开始,往后推了了31-15 = 16天
int day = 8113-(5343+16); //从1792年1月1日开始还剩多少天
//通过循环将年份确定下来,然后确定剩余天数
int year = 1792;
while(day>=365){
//先判断该年是不是闰年,如果是闰年就-366天
if( (year%4==0 && year%100!=0) || (year%400==0) ){
day -=366;
}else{
day -=365;
}
//然后就到下一年了
year++;
}
//这样就算出了年份1799(不是闰年),接下来是月份
int month = 1;
while(day>=30){
switch(month){
case 2:day-=28;break;
case 1:
case 3:
case 5:
case 7:
case 8:day-=31;break;
default: day-=30;
}
//减去这个月的天数之后,就到下一个月
month++;
}
//这样 year,month,day就都算出来了
//ps:月份少于10的要往前补0,天数也是
//System.out.println("year"+year+",month:"+month+",day:"+day);
//我这里看过结果了,直接拼接输出
System.out.println("1799-07-16");
}
}
答案是:
"1799-07-16"