zoukankan      html  css  js  c++  java
  • 08:特殊日历计算

    08:特殊日历计算
    总时间限制:1000ms 内存限制:65536kB
    描述
        有一种特殊的日历法,它的一天和我们现在用的日历法的一天是一样长的。
        它每天有10个小时,每个小时有100分钟,每分钟有100秒。
        10天算一周,10周算一个月,10个月算一年。
        现在要你编写一个程序,将我们常用的日历法的日期转换成这种特殊的日历表示法。
        这种日历法的时、分、秒是从0开始计数的。日、月从1开始计数,年从0开始计数。秒数为整数。

        假设 0:0:0 1.1.2000 等同于特殊日历法的 0:0:0 1.1.0。
    输入
        第一行是一个正整数 N ,表明下面有 N 组输入。
        每组输入有一行,格式如下:hour:minute:second day.month.year
        表示常规的日期。日期总是合法的。2000 <= year <= 50000。
    输出
        每组输入要求输出一行。格式如下:mhour:mmin:msec mday.mmonth.myear 是输入日期的特殊日历表示方法。
    样例输入
        7
        0:0:0 1.1.2000
        10:10:10 1.3.2001
        0:12:13 1.3.2400
        23:59:59 31.12.2001
        0:0:1 20.7.7478
        0:20:20 21.7.7478
        15:54:44 2.10.20749
    样例输出
        0:0:0 1.1.0
        4:23:72 26.5.0
        0:8:48 58.2.146
        9:99:98 31.8.0
        0:0:1 100.10.2000
        0:14:12 1.1.2001
        6:63:0 7.3.6848

    不分析了,详细看代码:

     1 #include <stdio.h>
     2 int getSumDay(int day,int month,int year);//计算并返回给定年、月、日距离2000年元月元旦已经经过的天数
     3 int getSumSecond(int hour,int minute,int second);//计算并返回给定时间距离当天凌晨零点的秒数
     4 int main()
     5 {
     6     int N,i;
     7     int hour,minute,second,day,month,year;
     8     int mhour,mmin,msec,mday,mmonth,myear;
     9     int sumDay,sumSecond;
    10 
    11     scanf("%d",&N);
    12     for(i=0;i<N;i++)
    13     {
    14         scanf("%d:%d:%d %d.%d.%d",&hour,&minute,&second,&day,&month,&year);
    15         sumDay=getSumDay(day,month,year);
    16 
    17         myear=sumDay/1000;
    18         mmonth=sumDay%1000/100+1;//比如1.5个月其实是2月的某一天,所以月份加1
    19         mday=sumDay%1000%100+1;
    20 
    21         sumSecond=getSumSecond(hour,minute,second);
    22         sumSecond=sumSecond*125/108; //sumSecond=sumSecond*100000/(3600*24); //注意,原始的时、分、秒和特殊日历的时、分、秒的意义(时间长度)不一样
    23         mhour=sumSecond/10000;
    24         mmin=sumSecond%10000/100;
    25         msec=sumSecond%10000%100;
    26 
    27         printf("%d:%d:%d %d.%d.%d
    ",mhour,mmin,msec,mday,mmonth,myear);
    28     }
    29     return 0;
    30 }
    31 int getSumDay(int day,int month,int year)//计算并返回给定年、月、日距离2000年元月元旦已经经过的天数
    32 {
    33     int ans=0;
    34     int y,m;
    35     int mDic[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    36 
    37     for(y=2000;y<year;y++)
    38     {
    39         if(y%4==0&&(y%100!=0||y%400==0))//如果y是闰年
    40             ans=ans+366;
    41         else ans=ans+365;
    42     }
    43 
    44     for(m=1;m<month;m++)
    45         ans=ans+mDic[m-1];
    46     if(month>2&&year%4==0&&(year%100!=0||year%400==0)) ans++;//year是闰年,而且月份大于2月,要多加一天
    47 
    48     ans=ans+day-1;//传过来的day,month,year对应的日期的那一天未曾过去,所以不能加这一天。
    49 
    50     return ans;
    51 }
    52 int getSumSecond(int hour,int minute,int second)//计算并返回给定时间距离当天凌晨零点的秒数
    53 {
    54     int ans=0;
    55     ans=hour*3600+minute*60+second;
    56     return ans;
    57 }
  • 相关阅读:
    HTML中一定会常用的标签和标签属性(这是网页构成的重要元素
    HTML(超文本语言)
    SQL SERVER中视图、事务
    important覆盖行内样式
    线性渐变
    「JavaScript面向对象编程指南」闭包
    移动端文章图片大小限制
    Vue中ajax返回的结果赋值
    「JavaScript面向对象编程指南」基础
    JS媒体查询
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/6264768.html
Copyright © 2011-2022 走看看