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 }
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    Python中循环引用(import)失败的解决方法
    junit中线程需要注意的问题
    python动态绑定属性和方法
    python输出缓冲区的问题
    使用RateLimiter完成简单的大流量限流,抢购秒杀限流
    guava的限流工具RateLimiter使用
    高性能分布式锁-redisson的使用
    正则表达式
    input 标签鼠标放入输入框补全提示
    Google guava工具类的介绍和使用
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8428197.html
Copyright © 2011-2022 走看看