91分求助!!c++
查看原帖
91分求助!!c++
666311
YangjinRun楼主2022/9/9 22:05
#include<bits/stdc++.h>
using namespace std;
string a,b,z,s;
int sum,days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},i,j,k,zmonth,zday,n,m;
int num_year(string a){
	int temp=0;
	for(int i=0;i<4;i++) temp=temp*10+(a[i]-'0');
	return temp;
}
int pd_month(int month,int f){
	if(f==1 && month==2) return 29;
	else return days[month];
}
string hw_year(int year){
	string s;
	while(year>0){
		s+=char(year%10+'0');
		year/=10;
	}
	return s;
}
int main(){
	cin>>a>>b;
	n=num_year(a);
	m=num_year(b);
	for(i=n;i<=m;i++){
		z=hw_year(i);
		//回文年 
		bool f=0;
		if((i%4==0 && i%100!=0) || i%400==0) f=1;
		//判断闰年
		if(i==n) j=(int(a[4])-'0')*10+(int(a[5])-'0');
		if(i==m) zmonth=(int(b[4])-'0')*10+(int(b[5])-'0');
		if(i!=n && i!=m){
			j=1;
			zmonth=12;
		}
		//特判起始月和结束月 
		for(;j<=zmonth;j++){
			if(j<=9) s[0]='0',s[1]=char(j+'0');
			else s[0]=char(j/10%10+'0'),s[1]=char(j%10+'0');
			//字符串加上月 
			if(j==n) k=(int(a[6])-'0')*10+(int(a[7])-'0');
			if(j==m) zday=(int(b[6])-'0')*10+(int(b[7])-'0');
			if(j!=n && j!=m){
				k=1;
				zday=pd_month(j,f);
			}
			//特判起始天和结束天 
			for(;k<=zday;k++){
				if(k<=9) s[2]='0',s[3]=char(k+'0');
				else s[2]=char(k/10%10+'0'),s[3]=char(k%10+'0');
				//字符串加上天
				bool flag=true;
				for(int o=0;o<4;o++){
					if(z[o]!=s[o]) flag=false;
				}
				if(flag) sum++;
				//判断是否回文 
				//cout<<z<<" "<<s[0]<<s[1]<<s[2]<<s[3]<<endl;
			}
		}
	}
	cout<<sum;
	return 0;
}
2022/9/9 22:05
加载中...