#27282: Java 解題示範&解釋如何解決答案差1的問題


s10914054@gm.cyut.edu.tw (Justin Tseng)

學校 : 不指定學校
編號 : 167107
來源 : [223.137.177.247]
最後登入時間 :
2022-08-30 17:42:14
a263. 日期差幾天 -- 板橋高中練習題 | From: [111.250.4.139] | 發表日期 : 2021-09-21 21:57

如果最後的年份是閏年 且月份超過2月 就需要+1

Example: 0001/1/1數到2012/5/1 --> 數到2012年之後 由於2012為閏年 2月有29天 所以只要月份超過2月就要加上2/29那天

以下為程式碼:

 

 

 

import java.util.*;

 

public class a263

{

public static long CalculateYear(int year,int month)

{

long pass=0;

 

for(int i=1;i<year;i++)

{

if((i%4==0 && i%100!=0) || i%400==0)

{

pass+=366;

}

else

{

pass+=365;

}

}

if((((year)%4==0 && (year)%100!=0) || (year)%400==0) && month>2)

{

pass+=1;

}

 

return pass;

}

public static long CalculateMonth(int year,int month)

{

long pass=0;

 

for(int i=1;i<month;i++)

{

if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)

{

pass+=31;

}

else if(i==4 || i==6 || i==9 || i==11)

{

pass+=30;

}

else

{

if((i%4==0 && i%100!=0) || i%400==0)

{

pass+=29;

}

else

{

pass+=28;

}

}

}

 

return pass;

}

public static long CalculateDay(int day)

{

return day-1;

}

public static void main(String[] args)

{

long total1,total2;

 

Scanner sc=new Scanner(System.in);

while(sc.hasNextInt())

{

int year1=sc.nextInt();

int month1=sc.nextInt();

int day1=sc.nextInt();

int year2=sc.nextInt();

int month2=sc.nextInt();

int day2=sc.nextInt();

 

total1=CalculateYear(year1,month1)+CalculateMonth(year1,month1)+CalculateDay(day1);

total2=CalculateYear(year2,month2)+CalculateMonth(year2,month2)+CalculateDay(day2);

System.out.println(Math.abs(total1-total2));

}

 

sc.close();

}

}

 
ZeroJudge Forum