• poj2080


    问题描述:
    n在我们现在使用的日历中, 闰年被定义为能被4整除的年份
    n但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。

    给定从公元2000年1月1日(周六)开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几

    输入:
    n输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。
    输出:
    n对每个测试样例,输出一行,该行包含对应的日期和星期几。
    n格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" and "Saturday“。
    样例输入

    1730

    1740

    1750

    1751

    -1 

    样例输出

    2004-09-26 Sunday

    2004-10-06 Wednesday

    2004-10-16 Saturday

    2004-10-17 Sunday

     1 #include<stdio.h>
     2 
     3 char a[7][10]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
     4 int y,m,d,n;
     5 
     6 int p(int n)
     7 {
     8     if(n%4==0&&n%100!=0||n%400==0)  return 1;
     9     else return 0;
    10 }
    11 
    12 void fun()
    13 {
    14     int v;
    15     for(y=2000,d=0;d<=n;y++)
    16     {
    17         if(p(y)) d+=366;
    18         else d+=365;
    19     }
    20     y--;
    21     if(p(y)) d-=366;
    22     else d-=365;
    23 
    24     m=1;
    25     if(p(y)) v=29;
    26     else v=28;
    27     while(d<=n)
    28     {
    29         switch(m++)
    30         {
    31         case 1:
    32         case 3:
    33         case 5:
    34         case 7:
    35         case 8:
    36         case 10:
    37         case 12:d+=31;break;
    38         case 2:d+=v;break;
    39         default:d+=30;
    40         }
    41     }
    42     m--;
    43     switch(m)
    44     {
    45         case 1:
    46         case 3:
    47         case 5:
    48         case 7:
    49         case 8:
    50         case 10:
    51         case 12:d-=31;break;
    52         case 2:d-=v;break;
    53         default:d-=30;
    54     }
    55 //    m--;
    56 
    57     d=n-d+1;
    58     printf("%d-%02d-%02d ",y,m,d);
    59 }
    60 
    61 int main()
    62 {
    63     while(scanf("%d",&n),n!=-1)
    64     {
    65         fun();
    66         if(m<3)
    67         {
    68             y--;
    69             m+=12;
    70         }
    71         printf("%s\n",a[(d+2*m+3*(m+1)/5+y+y/4+y/400-y/100)%7]);
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    字符数组,字符指针,字符串常量以及其sizeof的一些总结
    Linux——makefile
    动态定义多维数组
    二叉树的前序、中序、后序遍历(非递归)
    构造函数、析构函数抛出异常的问题
    倒排索引
    宏定义
    sizeof && strlen
    搜索引擎技术原理
    最小生成树
  • 原文地址:https://www.cnblogs.com/xiaofanke/p/3045408.html
Copyright © 2020-2023  润新知