zoukankan      html  css  js  c++  java
  • 日期类问题

    日期类问题有一个统一的思想:把原区间问题统一到起点确定的区间问题上去。当要求两个特定日期之间的天数差时,

                                                          只要将它们与原点日期的天数差相减,便能得到这两个特定日期之间的天数差(绝对值)

    下面的代码时求两个日期之间的间隔,和某日是星期几

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<math.h>
     4 
     5 int IsLeap(int x);
     6 int Sum( int y,int m,int d);
     7 
     8 char weekname[7][20]={
     9         "Sunday",
    10         "Monday",
    11         "Tuesday",
    12         "Wednesday",
    13         "Thursday",
    14         "Friday",
    15         "Saturday"
    16 };
    17 
    18 int main()
    19 {
    20     int y1,m1,d1,y2,m2,d2;
    21     int s1,s2,s3;
    22 
    23     scanf("%4d%2d%d",&y1,&m1,&d1);
    24     scanf("%4d%2d%d",&y2,&m2,&d2);
    25     s1 = Sum( y1,m1,d1);
    26     s2 = Sum( y2,m2,d2);
    27     s3 = Sum( 2018,02,07);
    28     int days = s1-s3;
    29     days += 3; //2018年2月7日是星期三
    30 
    31     printf("%d",abs( s1-s2));
    32     puts(weekname[(days%7+7)%7]);  //先求余在+7再求余是为了避免出现负数
    33 
    34     return 0;
    35 }
    36 int IsLeap(int x)
    37 {
    38     //判断是否是闰年
    39     return (x%100!=0 && x%4==0) || x%400==0 ? 1:0;
    40 }
    41 int Sum( int y,int m,int d)
    42 {
    43     //判断距离0年1月1日有多少天
    44     int x[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31};
    45     int i,s=0;
    46     for( i=0; i<y; i++){
    47         if( IsLeap(i))  s += 366;
    48         else s += 365;
    49     }
    50     if( IsLeap(y)) x[2] = 29;
    51 
    52     for( i=1; i<m; i++)  s += x[i];
    53 
    54     s += d;
    55 
    56     return s;
    57 }
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    数据结构-连续子数组的最大和
    数据结构-并查集
    nginx开启代理后,出现net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)错误
    计算出n阶乘中尾部零的个数
    常见的加密方式总结
    idea中lombok不生效
    纯真ip地址数据库使用
    go mod使用
    exec: "gcc": executable file not found in %PATH%解决办法
    java多线程系列1-初识多线程多线程4种实现方式
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8428197.html
Copyright © 2011-2022 走看看