zoukankan      html  css  js  c++  java
  • 蛤玮准备礼物

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

     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
    ",days);
    84     }
    85     return 0;
    86 }
  • 相关阅读:
    485串口接线
    mvc3 升级mvc5
    VB连接ACCESS数据库,使用 LIKE 通配符问题
    VB6 读写西门子PLC
    可用的 .net core 支持 RSA 私钥加密工具类
    解决 Win7 远程桌面 已停止工作的问题
    解决 WinForm 重写 CreateParams 隐藏窗口以后的显示问题
    解决安装 .net framework 发生 extracting files error 问题
    CentOS7 安装配置笔记
    通过特殊处理 Resize 事件解决 WinForm 加载时闪烁问题的一个方法
  • 原文地址:https://www.cnblogs.com/A-FM/p/5405962.html
Copyright © 2011-2022 走看看