码迷,mamicode.com
首页 > 其他好文 > 详细

蛤玮准备礼物

时间:2016-04-18 22:25:54      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

年份相差比较大 , 所以需要特殊处理一下 , 这一道题的数据量比较大 , 不优化的话 , 会超时  . 当程序写好之后 有错误 , 目前没发现 , 明天再看一下 

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<limits.h>
 6 #include<algorithm>
 7 #include<queue>
 8 #include<vector>
 9 #include<set>
10 #include<stack>
11 #include<string>
12 #include<sstream>
13 #include<map>
14 #include<cctype>
15 using namespace std;
16 // 1 , 年份不同的话   计算中间的 年差 , 然后再计算 ,  不完整的年 , 的差
17 // 2 , 年份相同的话   计算 中间的日期差
18 bool is_leap_year(int n)
19 {
20     if((n%4==0&&n%100!=0)||n%400==0)
21         return true;
22     return false;
23 }
24 int main()
25 {
26     int t,year1,year2,month1,month2,day1,day2,days,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
27     scanf("%d",&t);
28     while(t--)         // 中间 是  从 1900 年 到 100万年  中间的 年数比较多
29     {
30         days=0;
31         scanf("%d%d%d%d%d%d",&year1,&month1,&day1,&year2,&month2,&day2);  // 每四百年 都 是  146097 天 .
32         if(year1!=year2)
33         {
34             int time=max(0,year2-year1-1)/400;  //  有几个四百年  ?
35             days=time*146097;   // 按照完整的 四百年来说 有这么多天
36             year1=year1+time*400;               //
37             for(int i=year1+1;i<year2;i++)
38             {
39                 if(is_leap_year(i))
40                     days+=366;
41                 else
42                     days+=365;
43             }                               //  年份不同的话 , 中间的年份已经处理完毕 .
44             if(is_leap_year(year1))
45             {
46                 for(int i=month1+1;i<=12;i++)
47                     days+=b[i];
48                 days+=b[month1]-day1+day2;
49                 for(int i=1;i<month2;i++)
50                     days+=b[i];
51             }
52             else
53             {
54                 for(int i=month1+1;i<=12;i++)
55                     days+=a[i];
56                 days+=a[month1]-day1+day2;
57                 for(int i=1;i<month2;i++)
58                     days+=b[i];
59             }                                   //   年份不同的情况处理完毕  .
60         }
61         else        //  年份相同的话
62         {
63             if(month1==month2)  //  并且 月份 相同的话
64             {
65                 days=day2-day1;
66             }
67             else            //   年份 相同 处理完毕
68             {
69                 if(is_leap_year(year1))
70                 {
71                     for(int i=month1+1;i<month2;i++)
72                         days+=b[i];
73                     days+=b[month1]-day1+day2;
74                 }
75                 else
76                 {
77                     for(int i=month1+1;i<month2;i++)
78                         days+=a[i];
79                     days+=a[month1]-day1+day2;
80                 }               //  年份不同处理完毕
81             }
82         }
83         printf("%d\n",days);
84     }
85     return 0;
86 }

 

蛤玮准备礼物

标签:

原文地址:http://www.cnblogs.com/A-FM/p/5405962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!