题目:星系炸弹:
星系炸弹
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。
问题分析:
1.判断是否为闰年
- 先判断是否为闰年,这会影响2月份是28还是29,如果是闰年,2月份是29,如果不是,就是28
- 闰年分为普通闰年和世纪闰年,其判断方法为:公历年份是4的倍数,且不是100的倍数,为普通闰年。公历年份是整百数,且必须是400的倍数才是世纪闰年。归结起来就是通常说的:四年一闰;百年不闰,四百年再闰。
- 闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。地球绕太阳运行周期为365天5小时48分46秒,即一回归年。公历的平年只有365日,比回归年短约0.2422日,所余下的时间约为每四年累计一天,故第四年于2月末加1天,使当年的历年长度为366日,这一年就为闰年。
2.年,月,日的累加
当天数day值大于当月总天数,day从1号重新算起,那么月份加一;
当月份值大于当年的总月份,那么月份从一月重新算,那么年份加一;
代码如下:
public static void main(String []args) {
int[] monthdays = {31,28,31,30,31,30,31,31,30,31,30,31};
int year = 2014 ,month = 11,day=9;
int days = 1000;
for(int i=1;i<=days;i++){
day++;
if(year%400 == 0 || (year%4 == 0 && year%100 != 0)){
monthdays[1]=29;
}else{
monthdays[1]=28;
}
if(day>monthdays[month-1]){
day=1;
month++;
}
if(month>12){
month=1;
year++;
}
}
System.out.println(year+"年"+month+"月"+day+"日");
}
year%400 == 0 || (year%4 == 0 && year%100 != 0
这便是判断是否为闰年的条件
最后输出:
最后答案为:2017年8月5日