您的位置:首页 > 其它

2007年百度之星程序设计大赛试题初赛题目-题4-百度时间

2012-05-20 13:05 369 查看
题目描述

Baidu 的服务器上使用的不是北京时间,而是 Baidu 时间。 Baidu 时间的时分秒与北京时间相同,但是日期与北京时间不同,是用一个正整数表示从 2000 年 1 月 1 日 起的第几天。

现在就请大家设计一个程序将北京时间转换为百度时间。

输入格式

输入数据的每一行为一个待转化的北京时间,格式包括两种:

一种为: YYYY-MM-DD ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期);

另一种为: MM/DD/YYYY ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期);

不符合任何一种格式的输入视为非法输入。

输出格式

每个数据输出一行。如果格式正确,输出一个正整数,否则输出 Error 。

输入样例

2006-03-21

AStar2007

04/22/2007

输出样例

2149

Error

2463

my answer:

明明 是很简单的一道题,搞不懂它的输出样例是怎么算出来的

#include <iostream>
using namespace std;

char ch[11];
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool IsRun(int x);
int main()
{
while(cin>>ch)
{
int time[3] = {0}, j = 0, cnt = 0, i;
while(ch[j] != '\0' && cnt < 3)
{
if(ch[j] >= '0' && ch[j] <= '9')
{
time[cnt] = time[cnt] * 10 + ch[j] - '0';
}
else cnt++;
j++;
}
int year, month, day;
if(ch[2] == '/')
{
month = time[0];
day = time[1];
year = time[2];
}
else
{
year = time[0];
month = time[1];
day = time[2];
}
if(year < 2000 || year > 9999 ||
month <= 0 || month > 12 ||
day <= 0 || day > 31)
{
cout<<"Error"<<endl;
continue;
}
int ret = 0;
for(i = 2000; i < year; i++)
{
ret = ret + 365;
if(IsRun(i))
ret++;
}
for(i = 1; i < month; i++)
{
ret = ret + m[i];
if(IsRun(year))
ret++;
}
if(IsRun(year) && month == 2 && day <= 29)
ret = ret + day;
else if((!IsRun(year) || month != 2) && day <= m[month])
ret = ret + day;
else
{
cout<<"Error"<<endl;
continue;
}
ret--;
cout<<ret<<endl;
}
return 0;
}

bool IsRun(int year)
{
if(year % 4)
return 0;
if(year % 100)
return 1;
if(year % 400)
return 0;
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐