计算对2004-03-01的时间差。
输入数据的每一行为一个待转化的北京时间,格式包括两种:
一种为:YYYY-MM-DD ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期);
另一种为:MM/DD/YYYY ,( YYYY 表示四位数年份, MM 为两位月份, DD 为两位日期);
不符合任何一种格式的输入视为非法输入。
测试格式 每个数据输出一行。如果格式正确,输出一个整数(可为负 可为0 可为正),否则输出 Error 。
如果输入为负也输出为 Error
输入样例
2004-03-02
AStar2007
03/30/2004
1111/11/11
测试样例
1
Error
29
Error
日期的计算,不说了,上代码:使用类来表示一个日期:
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <memory.h>
#include <algorithm>
#include <vector>
using namespace std;
class Date
{
int year;
int month;
int day;
public:
Date(int y,int m,int d):year(y),month(m),day(d) {}
friend int sub(Date d1,Date d2);
};
int sub(Date d1,Date d2)
{
Date d = d1;
if(d1.year > d2.year)
{
d = d1;
d1 = d2;
d2 = d;
}
else if(d1.year == d2.year)
{
if(d1.month > d2.month)
{
d = d1;
d1 = d2;
d2 = d;
}
else if(d1.month == d2.month)
{
if(d1.day > d2.day)
{
d = d1;
d1 = d2;
d2 = d;
}
}
}
int days = 0;
for(int i= d1.year;i< d2.year;i++)
{
if((i%4 == 0 && i%100 != 0) || i%400 == 0)
days += 366;
else
days += 365;
}
for(int j = 1;j < d1.month;j++)
{
if(j ==1||j==3||j==5||j== 7||j == 8||j==10||j==12)
days -= 31;
else if(j==4||j==6||j==9||j==11)
days-=30;
else if(j==2)
{
if((d1.year%4 ==0&&d1.year%100!=0)||d1.year%400 == 0)
days-=29;
else
days-=28;
}
}
days-=d1.day;
for(int k=1;k<d2.month;k++)
{
if(k== 1||k==3||k==5||k==7||k==8||k==10||k==12)
days += 31;
else if(k == 4||k==6||k==9||k== 11)
days += 30;
else if(k == 2)
{
if((d2.year%4==0&& d2.year%100!=0)||d2.year%400==0)
days+= 29;
else
days+= 28;
}
}
days+=d2.day;
return days;
}
int main()
{
string test;
Date d(2004,03,01);
while(cin>>test)
{
if(test[2]=='/'){
int dd,mm,yy;
string sub1=test.substr(0,2);
mm=(sub1[0]-'0')*10+(sub1[1]-'0');
sub1=test.substr(3,2);
dd= (sub1[0]-'0')*10+(sub1[1]-'0');
sub1=test.substr(6,4);
yy=(sub1[0]-'0')*1000+(sub1[1]-'0')*100+(sub1[2]-'0')*10+sub1[3]-'0';
Date d1(yy,mm,dd);
if(yy<2004)cout<<"-";
else if(yy==2004){
if(mm<3)cout<<"-";
}
cout<<sub(d,d1)<<endl;
}
else if(test[4]=='-'){
int dd,mm,yy;
yy=(test[0]-'0')*1000+(test[1]-'0')*100+(test[2]-'0')*10+test[3]-'0';
mm=(test[5]-'0')*10+(test[6]-'0');
dd=(test[8]-'0')*10+test[9]-'0';
Date d2(yy,mm,dd);
if(yy<2004)cout<<"-";
else if(yy==2004){
if(mm<3)cout<<"-";
}
cout<<sub(d,d2)<<endl;
}
else cout<<"Error"<<endl;
}
return 0;
}