题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴,因为每天日历上都可以看到 2。
如果日历中只显示年月日,请问从公元 1900 年 11 月 11 日到公元 9999年 12 月 31 日,一共有多少天日历上包含 2。即有多少天中年月日的数位中包含数字2。
题目分析
1)可以用Calendar类的日期方法
2)也可以暴力求解
题目代码
方法一:
import java.util.Calendar; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { int res = 0; Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 1900); c.set(Calendar.MONTH, 1 - 1);//一定要这样注意!! c.set(Calendar.DAY_OF_MONTH, 1); while (c.get(Calendar.YEAR) < 10000) { String year = c.get(Calendar.YEAR) + ""; String month = c.get(Calendar.MONTH) + 1 + "";//得到的结果一样 String day = c.get(Calendar.DAY_OF_MONTH) + ""; if (year.contains("2") || month.contains("2") || day.contains("2")) res++; c.add(Calendar.DAY_OF_MONTH, 1); } System.out.println(res); } }
方法二:
import java.util.Calendar; public class 含2天数 { public static void main(String[] args) { long count = 0l; long runnian_sumday1 = 12 * 10 + 29 + 31; long runnian_sumday2 = 366;//366 long pinnian_sumday1 = 12 * 10 + 28 + 31; long pinnian_sumday2 = 365;//365 for (long i = 1900; i <= 9999; i++) { if (pabduan(i) && !(i + "").contains("2")) { count += runnian_sumday1; } else if (pabduan(i) && (i + "").contains("2")) { count += runnian_sumday2; } else if (!pabduan(i) && !(i + "").contains("2")) { count += pinnian_sumday1; } else if (!pabduan(i) && (i + "").contains("2")) count += pinnian_sumday2; } System.out.println(count); } static Boolean pabduan(long year) { if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { return true; } return false; } }