zoukankan      html  css  js  c++  java
  • 时间类问题

    1.闰年判断,4年一闰,100年不闰,400年再闰

    1 bool isLeap(int year){
    2     return (year%4==0&&year%100!=0)||(year%400==0);
    3 }

    闰年2月---29     平年2月-----28
    4、6、9、11月------------30   

    其他月份则为31天

    2.求指定日期是星期几

    基姆拉尔森计算公式: w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7

    结果对应关系     0:星期日   1:星期一    2:星期二  ........... 6:星期六

    注意:需要把一月和二月看成是上一年的十三月和十四月

    列:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 int fun(int y,int m,int d){
     6     if(m==1||m==2){  //需要把一月和二月看成是上一年的十三月和十四月   如果是2004-1-10 则换算成2003-13-10来代入公式计算
     7         m+=12;
     8         y--;
     9     }
    10     return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
    11 }
    12 
    13 int main()
    14 {
    15     int i,y,m,d;
    16     printf("请输入要判断的日期,格式为:y-m-d
    ");
    17     scanf("%d-%d-%d",&y,&m,&d);
    18     i=fun(y,m,d);
    19     switch(i)
    20     {
    21     case 0:
    22         printf("那天是星期日
    ");
    23         break;
    24     case 1:
    25         printf("那天是星期一
    ");
    26         break;
    27     case 2:
    28         printf("那天是星期二
    ");
    29         break;
    30     case 3:
    31         printf("那天是星期三
    ");
    32         break;
    33     case 4:
    34         printf("那天是星期四
    ");
    35         break;
    36     case 5:
    37         printf("那天是星期五
    ");
    38         break;
    39     case 6:
    40         printf("那天是星期六
    ");
    41         break;
    42     default:
    43         printf("输入错误!");
    44         break;
    45     }
    46     return 0;
    47 }

    3.几天后是几年几月几号(如高斯日记和星系炸弹)

     高斯日记

        大数学家高斯有个好习惯:无论如何都要记日记。

        他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

        后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。

        高斯出生于:1777年4月30日。
        在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

        高斯获得博士学位的那天日记上标着:8113   

        请你算出高斯获得博士学位的年月日。

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 int year=1777,month=4,day=30;
     6 
     7 bool isLeap(){ //闰年判断
     8     return (year%4==0&&year%100!=0)||(year%400==0);
     9 }
    10 
    11 int isEndofMonth(){  //判断是否月末
    12     switch(month)
    13     {
    14     case 4:          
    15     case 6:
    16     case 9:          /*如果是4,6,9,11月则判断day是否到了30,如果是则表示到了月末了*/
    17     case 11:   
    18         return day==30;
    19     case 2:       //2月先判断是否闰年
    20         if (isLeap())
    21             return day==29;  //如是闰年 判断day是否到了29,如果是则表示到了月末了
    22         else
    23             return day==28;  //如不是闰年 判断day是否到了28,如果是则表示到了月末了
    24     default:
    25         return day==31;    //既不是4,6,9,11月也不是2月,则判断day是否到了31,如果是则表示到了月末了
    26     }
    27 }
    28 
    29 void incDay(){
    30     if (isEndofMonth())//判断是否是月末
    31     {
    32         if(month==12){//年末
    33             day=1;month=1;year++;
    34         }
    35         else{
    36             day=1;month++;
    37         }
    38     }
    39     else{  //既不是月末,也不是年末
    40         day++;
    41     }
    42 }
    43 
    44 void addDay(int days){
    45     for(int i=1;i<days;i++)
    46         incDay();
    47 }
    48 
    49 int main()
    50 {
    51     addDay(5343);
    52     cout<<year<<"-"<<month<<"-"<<day<<endl;
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    《将才》读后感
    存储过程
    frame间传值
    IBM TSM解决方案的技术优势
    通过ISA发布Sharepoint 2007的两种认证方式
    ISA Server 2006新功能(1)
    MetaWeblogAPI C# Code Sample
    客户域环境维护记录
    春运教训
    1明
  • 原文地址:https://www.cnblogs.com/bfcs/p/10717515.html
Copyright © 2011-2022 走看看