百度时间(2007年百度之星初赛第一题)
2012-11-11 21:03
295 查看
百度时间
Baidu的服务器上使用的不是北京时间,而是Baidu时间。Baidu时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从2000年1月1日开始经过了几天。
现在就请大家设计一个程序将北京时间转换为百度时间。在本题中,闰年的年份是400的倍数,或者是4的倍数但不是100的倍数。比如2000和8888均为闰年,但6100不是。
输入格式
输入数据的每一行为一个待转化的北京时间(不含空格和TAB),正确的格式包括两种:
一种为:YYYY-MM-DD,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
另一种为:MM/DD/YYYY,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
输出格式
每个数据输出一行。如果可以成功转换,输出一个正整数,否则输出Error。
输入样例 例
2000-01-01
AStar2007
05/26/2007
输出样例 例
0
Error
2702
Baidu的服务器上使用的不是北京时间,而是Baidu时间。Baidu时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从2000年1月1日开始经过了几天。
现在就请大家设计一个程序将北京时间转换为百度时间。在本题中,闰年的年份是400的倍数,或者是4的倍数但不是100的倍数。比如2000和8888均为闰年,但6100不是。
输入格式
输入数据的每一行为一个待转化的北京时间(不含空格和TAB),正确的格式包括两种:
一种为:YYYY-MM-DD,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
另一种为:MM/DD/YYYY,(YYYY表示四位数年份,MM为两位月份,DD为两位日期);
输出格式
每个数据输出一行。如果可以成功转换,输出一个正整数,否则输出Error。
输入样例 例
2000-01-01
AStar2007
05/26/2007
输出样例 例
0
Error
2702
#include<stdio.h> #include<stdlib.h> #include<string.h> #define OK 1 #define ERROR 0 #define status int typedef struct data { int year; int mouth; int day; }data; status get_y_m_d(char *data,int &year,int &mouth,int &day); int get_data(int year,int mouth,int day); status isnum(char ch); status isrunnian(int year); int main() { int i,j; int year,mouth,day; char data[100][20]; for(i=0;i<100;i++) data[i][0]='\0'; year=mouth=day=0; for(i=0;i<100;i++) { scanf("%s",data[i]); data[i][strlen(data[i])]='\0'; //getchar(); if(data[i][0]=='#') break; } for(j=0;j<i;j++) { if(get_y_m_d(data[j],year,mouth,day)==OK) printf("%d\n",get_data(year,mouth,day)); else printf("Error\n"); } system("pause"); return 0; } status isnum(char ch) { if(ch>='0'&&ch<='9') return OK; else return ERROR; } status get_y_m_d(char *data,int &year,int &mouth,int &day) { int i; year=mouth=day=0; if(data[2]=='/'&&data[5]=='/')// MM/DD/YYYY 格式的,暂时认为 { if(strlen(data)!=10) return ERROR; else { if(isnum(data[0])&&isnum(data[1]))//mm if(isnum(data[3])&&isnum(data[4]))//dd if(isnum(data[6])&&isnum(data[7])&&isnum(data[8])&&isnum(data[9]))//yyyy { mouth=(data[0]-'0')*10+(data[1]-'0'); day=(data[3]-'0')*10+(data[4]-'0'); year=(data[6]-'0')*1000+(data[7]-'0')*100+(data[8]-'0')*10+(data[9]-'0'); return OK; } return ERROR; } } else if(data[4]=='-'&&data[7]=='-')//YYYY-MM-DD 格式的,暂时认为 { if(strlen(data)!=10) return ERROR; else { if(isnum(data[0])&&isnum(data[1])&&isnum(data[2])&&isnum(data[3]))//yyyy if(isnum(data[5])&&isnum(data[6]))//mm if(isnum(data[8])&&isnum(data[9]))//dd { year=(data[0]-'0')*1000+(data[1]-'0')*100+(data[2]-'0')*10+(data[3]-'0'); mouth=(data[5]-'0')*10+(data[6]-'0'); day=(data[8]-'0')*10+(data[9]-'0'); return OK; } return ERROR; } } else return ERROR; } int get_data(int year,int mouth,int day) { int i; int count; count=0; for(i=2000;i<year;i++) if(isrunnian(i)==OK) count+=366; else count+=365; if(mouth<=2) count+=((mouth-1)*31+day); else { switch(mouth) { case 3:count+=(31+29+day); break; case 4:count+=(31+29+31+day);break; case 5:count+=(31+29+31+30+day);break; case 6:count+=(31+29+31+30+31+day);break; case 7:count+=(31+29+31+30+31+30+day);break; case 8:count+=(31+29+31+30+31+30+31+day);break; case 9:count+=(31+29+31+30+31+30+31+31+day);break; case 10:count+=(31+29+31+30+31+30+31+31+30+day);break; case 11:count+=(31+29+31+30+31+30+31+31+30+31+day);break; case 12:count+=(31+29+31+30+31+30+31+31+30+31+30+day);break; } if(!isrunnian(year)) count--; } return count-1;//2000-01-01为第一天 } status isrunnian(int year) { if(year%400==0||(year%4==0&&year%100!=0)) return OK; return ERROR; }
相关文章推荐
- 2007年百度之星程序设计大赛试题初赛题目-题4-百度时间
- 2007年百度之星程序设计大赛试题初赛题目-题4-百度时间
- 百度之星初赛A第一题
- 杨辉三角与组合数的关系(百度之星17年初赛B第一题)
- 2007年百度之星程序设计大赛试题初赛题目-题3-实习生小胖的百度网页过滤器
- 2007年百度程序设计大赛Astar初赛题目(第二场)
- 2007年百度之星程序设计大赛试题初赛题目-题1-百度的高级搜索方法
- 2007年百度之星程序设计大赛试题初赛题目-题3-实习生小胖的百度网页过滤器
- 2007年百度之星程序设计大赛初赛题目——百度的高级搜索方法
- 2007年百度之星程序设计大赛试题初赛题目-题1-百度的高级搜索方法
- 2005年百度之星初赛题目第一题(连续正整数)
- 2017百度之星初赛B场第一题Chess--简单杨辉三角问题
- 2007年百度之星初赛题目
- HDU 5246 超级赛亚ACMer(百度之星初赛第一题)
- php解:2007百度之星5月27号初赛题---------2实习生小胖的百度网页过滤器
- 2007年百度程序设计大赛Astar初赛题目(第一场)
- 2007年百度之星初赛题目
- 百度之星赛题——百度时间
- [原]图标排列-2011百度之星初赛第一题解答
- 2005年百度之星初赛第一题分析与解答