fanguowei2023 @ 2023-12-21 20:12:22
点8、9、10错了
#include<iostream>
using namespace std;
long long n,y,r,n1,y1,r1,n2,y2,r2,ans,f;
string a,b;
int main()
{
getline(cin,a);//开始日期
getline(cin,b);//结束日期
for(int i=0;i<4;i++)n1=n1*10+a[i]-'0';//获得开始年月日
for(int i=4;i<6;i++)y1=y1*10+a[i]-'0';
for(int i=6;i<8;i++)r1=r1*10+a[i]-'0';
for(int i=0;i<4;i++)n2=n2*10+b[i]-'0';//获得结束年月日
for(int i=4;i<6;i++)y2=y2*10+b[i]-'0';
for(int i=6;i<8;i++)r2=r2*10+b[i]-'0';
while(1)//n1,y1,r1分别表示现在的年月日
{
f=0;//月份是否更新
int temp=n1*10000+y1*100+r1;//当前日期
if(temp>n2*10000+y2*100+r2)break;//如果超过结束日期,退出循环
int temp1=temp,temp2=0;
while(temp>=1)//反转日期
{
temp2=temp2*10+(temp%10);
temp/=10;
}
if(temp2==temp1)ans++;//如果日期回文,答案加1
if(y1==12)n1++,y1=1,r1=1;//更新年份
else if(r1==31 && (y1==1 || y1==3 || y1==5 || y1==7 || y1==8 || y1==10 || y1==12))y1++,r1=1,f=1;//31天的月份
else if(r1==30 && (y1==4 || y1==6 || y1==9 || y1==11))y1++,r1=1,f=1;//30天的月份
else if(y1==2)//2月
{
if(((n1%4==0 && n1%100!=0) || (n1%400==0)) && r1==29)y1++,r1=1,f=1;//如果是闰年并且2月到了29日,更新月份
else if((!((n1%4==0 && n1%100!=0) || (n1%400==0))) && r1==28)y1++,r1=1,f=1;//如果不是闰年并且2月到了28日,更新月份
}
if(f==0)r1++;//如果月份没变,更新日
}
cout<<ans;//输出答案
return 0;
}
by sunnycl @ 2023-12-26 20:08:06
@fanguowei2023
#include<iostream>
using namespace std;
long long n,y,r,n1,y1,r1,n2,y2,r2,ans,f;
string a,b;
int main()
{
getline(cin,a);//开始日期
getline(cin,b);//结束日期
for(int i=0;i<4;i++)n1=n1*10+a[i]-'0';//获得开始年月日
for(int i=4;i<6;i++)y1=y1*10+a[i]-'0';
for(int i=6;i<8;i++)r1=r1*10+a[i]-'0';
for(int i=0;i<4;i++)n2=n2*10+b[i]-'0';//获得结束年月日
for(int i=4;i<6;i++)y2=y2*10+b[i]-'0';
for(int i=6;i<8;i++)r2=r2*10+b[i]-'0';
while(1)//n1,y1,r1分别表示现在的年月日
{
f=0;//月份是否更新
int temp=n1*10000+y1*100+r1;//当前日期
if(temp>n2*10000+y2*100+r2)break;//如果超过结束日期,退出循环
int temp1=temp,temp2=0;
while(temp>=1)//反转日期
{
temp2=temp2*10+(temp%10);
temp/=10;
}
if(temp2==temp1)ans++;//如果日期回文,答案加1
if(y1==12 && r1==31)n1++,y1=1,r1=1,f=1;//更新年份
else if(r1==31 && (y1==1 || y1==3 || y1==5 || y1==7 || y1==8 || y1==10 || y1==12))y1++,r1=1,f=1;//31天的月份
else if(r1==30 && (y1==4 || y1==6 || y1==9 || y1==11))y1++,r1=1,f=1;//30天的月份
else if(y1==2)//2月
{
if(((n1%4==0 && n1%100!=0) || (n1%400==0)) && r1==29)y1++,r1=1,f=1;//如果是闰年并且2月到了29日,更新月份
else if((!((n1%4==0 && n1%100!=0) || (n1%400==0))) && r1==28)y1++,r1=1,f=1;//如果不是闰年并且2月到了28日,更新月份
}
if(f==0)r1++;//如果月份没变,更新日
}
cout<<ans;//输出答案
return 0;
}
if(y1==12)n1++,y1=1,r1=1;//更新年份
应该改成
if(y1==12&&r1==31)n1++,y1=1,r1=1,f=1;//更新年份
要到12月31日才能更新年份
更新年份的时候也算更新月份