70分求调qwq

P2010 [NOIP2016 普及组] 回文日期

@[fanguowei2023](/user/799530) ```cpp #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; } ``` ------- ```cpp if(y1==12)n1++,y1=1,r1=1;//更新年份 ``` 应该改成 ```cpp if(y1==12&&r1==31)n1++,y1=1,r1=1,f=1;//更新年份 ``` 要到12月31日才能更新年份 更新年份的时候也算更新月份
by sunnycl @ 2023-12-26 20:08:06


|