试用 C++的类来表示日期,给定 2 个日期 yyyy.mm.dd 求两个日期间相差的天数。
第 1 行为一个正整数T,表示测试数。
对于每个测试点,第 1 行与第 2 行分别有两个日期 yyyy.mm.dd。
对于每个测试点,输出一行数字,表示相差的天数。
2 2000.02.28 2000.03.01 6297.01.21 2351.11.27
2 1440938
方法:主要是将输入转换成年月日 可以直接把点当成字符输入 即是年字符月字符日
#include<iostream> /*方法一*/
#include<cmath>
#include<cstring>
using namespace std;
char a[11];
int c[11];
char b[11];
int d[11];
/*long long swap(long long a,long long b)
{
long long temp;
if(a<=b)
{
a=a;
b=b;
}
if(a>b)
{
temp=a;
a=b;
b=temp;
}
}*/
int ji_suan(int year_a,int yue_a,int ri_a)
{
long long cha=0;
for(int i=1;i<year_a;i++)
{
if(i%4==0&&i%100!=0) cha=cha+366;
else cha=cha+365;
int k=year_a/400;
cha=cha+k;
}
for(int j=1;j<ri_a;j++)
{
cha=cha+1;
}
for(int i=1;i<yue_a;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{
cha=cha+31;}
if(i==4||i==6||i==9||i==11)
{
cha=cha+30;
}
if(i==2&&year_a%4==0&&year_a%100!=0)
{
cha=cha+29;
}
if(year_a%400==0) cha=cha+2;
if(i==2&&(year_a%4)!=0)
{
cha=cha+28;
}
}return cha;}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a;
cin>>b;
int aa=strlen(a);
int bb=strlen(b);
for(int j=0;j<aa;j++)
{
if(a[j]!='.')
{
c[j]=a[j]-'0';
}
if(a[j]=='.')
{ c[j]=='.'-'.';}
}
for(int j=0;j<bb;j++)
{
if(b[j]!='.')
{
d[j]=b[j]-'0';
}
if(b[j]=='.')
{ d[j]=='.'-'.';}
}
long long temp=0;
long long temp2=0;
for(int k=0;k<aa;k++)
{
temp=temp+c[k]*pow(10,aa-k-1);
}
for(int k=0;k<bb;k++)
{
temp2=temp2+d[k]*pow(10,bb-k-1);
}
long long cha=0;
int yue_a;
int yue_b;
int year_a;
int year_b;
int ri_a;
int ri_b;
year_a=temp/1000000;
year_b=temp2/1000000;
yue_a=(temp%100000)/1000;
yue_b=(temp2%100000)/1000;
ri_a=temp%100;
ri_b=temp%100;
cout<<int(abs(ji_suan(year_b,yue_b,ri_b)-ji_suan(year_a,yue_a,ri_a)))<<endl;
}
return 0;
}