1 条题解

  • 0
    @ 2023-12-24 23:24:57

    题解见注释

    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
    上传者