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

本文介绍了一个简单的程序,用于将北京时间转换成百度特有的日期表示方式——百度时间。该程序能够处理两种不同的日期输入格式,并通过计算从2000年1月1日起的天数来得出百度时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述 

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

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

输入格式 

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

一种为: 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; }

转载于:https://www.cnblogs.com/windmissing/archive/2012/05/20/2559817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值