u
问题描述
•
有一种特殊的日历法,它的一天和我们现在用的日历法的一天是一样长的。它每
天有
10
个小时,每个小时有
100
分钟,每分钟有
100
秒。
10
天算一周,
10
周算一
个月,
10
个月算一年。
•
现在要你编写一个程序,将我们常用的日历法的日期转换成这种特殊的日历表示
法。这种日历法的时、分、秒是从
0
开始计数的。日、月从
1
开始计数,年从
0
开
始计数。秒数为整数。假设
0:0:0 1.1.2000
等同于特殊日历法的
0:0:0 1.1.0
。
u
输入
•
第一行是一个整数
N
,表示测试样例的数目。
每个测试样例包含一行,
格式为:
“
hour:minute:second day.month.year
”
日期总是合法的,
并且
2000 <= year <= 50000.
u
输出
•
对于每个测试样例输出一行,该行包含转换后得到的特殊日历表示法,
形如:
"mhour:mmin:msec mday.mmonth.myear"
#include <stdio.h> #include<string.h> #include<stdlib.h> int leap[50010]; int vis[12]={31,28,31,30,31,30,31,31,30,31,30,31}; void isleap() { int i,j; memset(leap,0,sizeof(leap)); for(i=2000;i<=50000;i++) { if(i%4==0&&i%100!=0||i%400==0) leap[i]=1; } } int total_days(int year,int month,int day) { int i,j;int sum=0; for(i=2000;i<year;i++) if(leap[i]) sum+=366; else sum+=365; for(i=0;i<month-1;i++) sum+=vis[i];//加上月份天数 if(leap[year]) if(month>2) sum++; return sum+day-1; } int main() { int i,j,T; int hour,minute,sec,day,month,year; int mhour,mminute,msec,mday,mmonth,myear; int total_day,total_sec,mod; scanf("%d",&T); isleap(); while(T--) { total_day=total_sec=mod=0; scanf("%d%*c%d%*c%d%*c%d%*c%d%*c%d",&hour,&minute,&sec,&day,&month,&year); total_day=total_days(year,month,day); myear=total_day/1000; mod=total_day%1000; mmonth=mod/100+1; mod%=100; /* 加1是因为total_days();返回的天数不包括当天 */ mday=mod+1; total_sec=(int)((3600*hour+60*minute+sec)*250.0/216); /* mday+=total_sec/100000; 不必要,因为原来的不够一天的 在新日历法中肯定也不够一天 */ mhour=total_sec/10000;//100分钟,100秒 mod=total_sec%10000; mminute=mod/100; mod%=100; msec= mod; /* 后边两个是点号,吃了一个wa */ printf("%d:%d:%d %d.%d.%d\n",mhour,mminute,msec,mday,mmonth,myear); } system("pause"); return 0; }