黑马程序员技术交流社区

标题: 有谁知道下面这个题目怎么做? [打印本页]

作者: 孤影卓尔    时间: 2014-2-24 19:31
标题: 有谁知道下面这个题目怎么做?
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
例如:
用户输入了:1949-10-2
程序输出:1
用户输入了:1949-11-1
程序输出:31
作者: 丶小天    时间: 2014-2-24 19:37
这么做:
  1. public static int getDays(GregorianCalendar g1, GregorianCalendar g2) {
  2.         int elapsed = 0;
  3.         GregorianCalendar gc1, gc2;
  4.         if (g2.after(g1)) {
  5.                 gc2 = (GregorianCalendar) g2.clone();
  6.                 gc1 = (GregorianCalendar) g1.clone();
  7.         } else {
  8.                 gc2 = (GregorianCalendar) g1.clone();
  9.                 gc1 = (GregorianCalendar) g2.clone();
  10.         }
  11.         gc1.clear(Calendar.MILLISECOND);
  12.         gc1.clear(Calendar.SECOND);
  13.         gc1.clear(Calendar.MINUTE);
  14.         gc1.clear(Calendar.HOUR_OF_DAY);
  15.         gc2.clear(Calendar.MILLISECOND);
  16.         gc2.clear(Calendar.SECOND);
  17.         gc2.clear(Calendar.MINUTE);
  18.         gc2.clear(Calendar.HOUR_OF_DAY);
  19.         while (gc1.before(gc2)) {
  20.                 gc1.add(Calendar.DATE, 1);
  21.                 elapsed++;
  22.                 }
  23.                 return elapsed;
  24.         }
  25.         public void main(String[] args) {
  26.         Calendar cal = Calendar.getInstance();
  27.         GregorianCalendar gc1 = new GregorianCalendar(2009, Calendar.JANUARY, 1);
  28.         GregorianCalendar gc2 = new GregorianCalendar(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH), cal.get(Calendar.DATE));
  29.         int days= getDays(gc1, gc2);
  30.         System.out.println(days);
  31. }
复制代码

作者: syw02014    时间: 2014-2-24 20:07
本帖最后由 syw02014 于 2014-2-24 20:09 编辑

这是一道 蓝桥杯题目,之前赛前联系时练过,直接给你代码(核心部分用函数写你):
  1. public static int countDays(int year, int month, int day)
  2.         {
  3.                
  4.                 int[][] days={{31,28,31,30,31,30,31,31,30,31,30,31}, //闰年、平年每月的天数
  5.                                       {31,29,31,30,31,30,31,31,30,31,30,31}};
  6.                 int index=year%4==0&&year%100!=0||year%400==0?1:0;//用index标识是什么年0:平,1:闰年        
  7.                 if(year<1949||month<1||month>12||day<1||day>days[index][month-1])//判断输入日期是否正确
  8.                         return -1;
  9.                 int[] years ={365, 366};
  10.                 int otherDays=92;             //1949-10-1到1950-1-1剩余的天数
  11.                 int count=0;                      //用于统计日期离1949-10-1有多少天
  12.                 if(1949==year)                 //如果输入year为1949
  13.                 {
  14.                         if(10<month)
  15.                                 return -1;
  16.                         if(10==month)
  17.                                 count=day--;
  18.                         else if(11==month)
  19.                                 count=days[0][9]+day - 1;
  20.                         else if(12==month)
  21.                                 count=days[0][9]+days[0][10]+day-1;
  22.                 }
  23.                 else       //如果输入year大于1949
  24.                 {
  25.                         if(year-1949==1)     //如果输入year等于1950
  26.                         {
  27.                                 for(int i=0;i<month--;i++)
  28.                                         count+=days[index][i];
  29.                                 count+=otherDays+day-1;
  30.                         }
  31.                         else         //如果输入year大于1950
  32.                         {
  33.                                 for(inti=1950;i<year;i++)
  34.                                 {
  35.                                         int index2=i%4==0&&i%100!=0||i%400==0?1:0;
  36.                                         count+=years[index2];
  37.                                 }
  38.                                 for(int i=0;i<month-1;i++)
  39.                                         count+=days[index][i];
  40.                                 count+=otherDays+day-1;
  41.                         }
  42.                 }
  43.                 return count;
  44.         }
复制代码









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2