政务桌面应用系统开发提升政府服务效率的关键所在
713
2022-10-01
某校2017专硕编程题-出国留学的天数
问题
学者A去国外求学,假定离开祖国的日子为公园A年B月C日,返回的日子为公元X年Y月Z日。请计算A出国留学的总天数(含离开和返回当天)。
分析
思路1
工具类
思路2
出走当年天数计算 返回当年天数计算 中间间隔天数计算 返回和出走是同一年计算
思路3
出走和离开时间距离0年0月0日的天数之差
Java实现
思路1
public static long day2(int A,int B,int C,int X,int Y,int Z){ return LocalDate.of(X,Y,Z).toEpochDay()-LocalDate.of(A,B,C).toEpochDay()+1; }
思路2
public static int day(int A,int B,int C,int X,int Y,int Z) { int days = 0; //出走和回来的间隔年 for (int i = A+1; i < X; i++) { if ((i % 4 == 0 && i % 100 != 0)||i % 400 == 0) { days += 366; }else { days += 365; } } //出走和离开是同一年 if(X == A) { //离开和出走是同一月 if (B == Y){ days += Z-C+1; }else { for (int i = B+1; i < Y; i++) { days += dateUtil(i); } //离开月的天数 days += dateUtil(B) + 1; days += Y; } //离开和出走不是同一年 }else { //出走月 for (int i = B+1; i <=12 ; i++) { days += dateUtil(i); } //出走的当月天数 days += dateUtil(B) - C + 1; //闰年 if ((A % 4 == 0 && A % 100 != 0)||A % 400 == 0) { if (B < 3) days += 1; } //返回月计算 for (int i = 1; i < Y ; i++) { days += dateUtil(i); } //返回当天计算 days += Z; //回来的闰年 if ((X % 4 == 0 && X % 100 != 0)||X % 400 == 0) { if (Y > 3) days += 1; } } return days; } public static int dateUtil(int month){ int days = 0; switch (month){ case 1: days += 31;break; case 2: days += 28;break; case 3: days += 31;break; case 4: days += 30;break; case 5: days += 31;break; case 6: days += 30;break; case 7: days += 31;break; case 8: days += 31;break; case 9: days += 30;break; case 10: days += 31;break; case 11: days += 30;break; case 12: days += 31;break; } return days; }
思路3
public static int dateUtil(int month){ int days = 0; switch (month){ case 1: days += 31;break; case 2: days += 28;break; case 3: days += 31;break; case 4: days += 30;break; case 5: days += 31;break; case 6: days += 30;break; case 7: days += 31;break; case 8: days += 31;break; case 9: days += 30;break; case 10: days += 31;break; case 11: days += 30;break; case 12: days += 31;break; } return days; } public static long day(int A,int B,int C){ long days = 0; for (int i = 0; i < A; i++) { if ((i % 4 == 0 && i % 100 != 0)||i % 400 == 0) { days += 366; }else { days += 365; } } for (int i = 1; i < B; i++) { days += dateUtil(i); if ((A % 4 == 0 && A % 100 != 0)||A % 400 == 0) { if (i == 2) days += 1; } } days += C; return days; } public static long day3(int A,int B,int C,int X,int Y,int Z){ return day(X,Y,Z)-day(A, B, C)+1; }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~