Problem Y: 哪一天,哪一秒?
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 337 Solved: 196
[Submit][Status][Web Board]
Description
小王特爱数字。期末复习各门功课烧脑厉害,他想换换脑筋,就想算算数。他想任意给出一个时间(年月日时分秒),得出是一年当中的第几天,还有,这是一年中的第几秒。
下面的程序,定义了一个结构体以及部分程序,可以对n个时间做如上的操作,请按给出程序限制的形式,定义出其他必须的函数并提交。
Input
整数n,代表处理几个日期值
n行日期值,每行的整数分别代表年、月、日、时、分、秒,测试数据保证都是合法时间取值,即不会出类似2月30号的输入
Output
n行输出,每行对应给出的时间是当年第几天,以及是当年第几秒
Sample Input
3
1971 1 8 14 25 48
2011 2 27 1 27 35
2012 11 2 11 23 1
Sample Output
8 743148
58 5016455
307 26565781
#include <stdio.h> struct Time { int year; int month; int day; int hour; int minute; int second; }; void getTime(struct Time *pt); int dayOfYear(struct Time t); long secondOfyear(struct Time *pt); int main() { struct Time t; int i,n; scanf("%d",&n); for(i=0;i<n;i++) { getTime(&t); printf("%d %ld\n",dayOfYear(t),secondOfyear(&t)); } return 0; } int dayOfYear(struct Time t) { int i; int r=0; r=t.day; if((t.year%4==0&&t.year%100!=0)||(t.year%400==0)&&(t.month>=2)) { r=r+1; } for(i=1;i<=t.month;i++) { if(i==2) r+=31; if(i==3) r+=28; if(i==4) r+=31; if(i==5) r+=30; if(i==6) r+=31; if(i==7) r+=30; if(i==8) r+=31; if(i==9) r+=31; if(i==10) r+=30; if(i==11) r+=31; if(i==12) r+=30; } return r; } long secondOfyear(struct Time *pt) { int n; n=dayOfYear(*pt)*3600*24+(*pt).hour*3600+(*pt).minute*60+(*pt).second; return n; } void getTime(struct Time *pt) { scanf("%d%d%d%d%d%d", &pt->year, &pt->month, &pt->day, &pt->hour, &pt->minute, &pt->second); return; }