1 条题解
-
0
题解见注释
import java.util.Scanner; public class P1007 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //输入处理 int count = sc.nextInt(); for (int i = 0; i < count; i++) { String birthday = sc.next(); int days = EighteenBirthday(birthday); System.out.println(days); } } //生日到18岁天数计算 public static int EighteenBirthday(String birthday){ int days = 0; String[] dates = birthday.split("-"); int[] datesNum = new int[dates.length]; //字符串转为int for (int i = 0; i < dates.length; i++) { datesNum[i] = Integer.parseInt(dates[i]); } //如果出生在闰年的2月29日,因为18不是4的倍数,所以没有18岁生日 if(datesNum[1] == 2 && datesNum[2] == 29){ return -1; } //日期计算 for(int i = datesNum[0]+1;i <= datesNum[0]+18;i++){ if (LeapYearJudgement(i)){ days += 366; }else { days += 365; } } //日期修正 //例:出生年是闰年,且生日早于2月29日,应该再加1 //例:18岁那年是闰年,但生日早于2月29日,应该再减-1 //由于18不是4的倍数,这两种情况不会同时发生 if(LeapYearJudgement(datesNum[0])){ if(datesNum[1] <= 2 && datesNum[2] <= 28) { days++; } } if(LeapYearJudgement(datesNum[0]+18)){ if(datesNum[1] <= 2 && datesNum[2] <= 28) { days--; } } return days; } //闰年判断 public static boolean LeapYearJudgement(int year){ if(year % 4 == 0){ if(year % 100 == 0){ return year % 400 == 0; }else { return true; } }else { return false; } } }
信息
- ID
- 8
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 2
- 上传者