My code as belo for Item one :
#include<iostream>
#include <vector>
#include "stdlib.h"
using namespace std;
bool IsLeap(int year)
{
if( !year%4 && year%100) return true;
if(!year%4 && !year%100 && !year%400) return true;
return false;
}
int CalculateDays(int year, int month, int day)
{
int day_tbl[][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
int i_nLeaps = 1;
int days = 0;
if(year > 2000)
{
int i = year - 2000 -1;
i_nLeaps += (i/4) - i/100 + i/400;
days += i*364 + i_nLeaps;
int j;
if(IsLeap(year))
{
for(j=1; j<month; j++)
days += day_tbl[0][j-1];
days += day -1;
}
else
{
for(j=1; j<month; j++)
days += day_tbl[1][j-1];
days += day -1;
}
}
if( year = 2000)
{
int j;
for(j=1; j<month; j++)
days += day_tbl[1][j];
days += day -1;
}
return days;
}
//bool JudgeValid(string year, string month, string day)
//{
//
// if(str_year.compare("2000") < 0) return false;
// if(str_year.compare("9999") > 0)) return false;
// if(str_month.compare("01") < 0) return false;
// if(str_month.compare("12") > 0) return false;
// if(str_day.compare(""))
//
// atol
//
//}
int main()
{
int n_year, n_month, n_day;
vector<string> vs_input;
char ch_buffer[200];
string str1;
while(cin.getline(ch_buffer, 200, '/x0a'))
{
str1 = ch_buffer;
if(!str1.compare("")) break;
vs_input.push_back(ch_buffer);
}
int n_InputNumbers;
n_InputNumbers = vs_input.size();
int i;
string::size_type n_pos;
string str_year, str_month, str_day;
for(i=0; i<n_InputNumbers; i++)
{
//cout << vs_input[i].c_str() << endl;
str1 = vs_input[i];
if((n_pos = str1.find_first_of('-')) != string::npos)
{
str_year.assign(str1, 0, n_pos);
str1.erase(0, n_pos+1);
if((n_pos = str1.find_first_of('-')) != string::npos)
{
str_month.assign(str1, 0, n_pos);
str1.erase(0, n_pos+1);
str_day = str1;
}
if(
(n_year = atoi(str_year.c_str()) ) == 0
||
(n_month = atoi(str_month.c_str())) == 0
||
(n_day = atoi(str_day.c_str())) == 0 )
cout << "Error" << endl;
else
cout << CalculateDays(n_year, n_month, n_day) << endl;
}
else if((n_pos = str1.find_first_of('/')) != string::npos)
{
str_month.assign(str1, 0, n_pos);
str1.erase(0, n_pos+1);
if((n_pos = str1.find_first_of('/')) != string::npos)
{
str_day.assign(str1, 0, n_pos);
str1.erase(0, n_pos+1);
str_year = str1;
}
if(
(n_year = atoi(str_year.c_str()) ) == 0
||
(n_month = atoi(str_month.c_str())) == 0
||
(n_day = atoi(str_day.c_str())) == 0 )
cout << "Error" << endl;
else
cout << CalculateDays(n_year, n_month, n_day) << endl;
}
else cout << "Error" << endl;
}
return 0;
}
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
评分规则