以下代码为什么只能在学校的Oj平台上通过67%的样例啊,谢各位指点。
自认为写的已经足够了。
#include<stdio.h>
int main()
{
int a,b,i,j,k,n1,n2;
while(~scanf("%d %d",&a,&b)){
int sum=0;
n1=a/10000;
n2=b/10000;
int x[4]={0};
for(i=n1;i<=n2;i++){
int day[99]={31,28,31,30,31,30,31,31,30,31,30,31};
if((i%4==0&&i%100!=0)||i%400==0)
day[1]=29;
x[0]=i/1000;
x[1]=i/100-x[0]*10;
x[3]=i%10;
x[2]=(i%100-x[3])/10;
if(i*10000+x[3]*1000+x[2]*100+x[1]*10+x[0]>=a&&i*10000+x[3]*1000+x[2]*
100+x[1]*10+x[0]<=b&&day[x[3]*10+x[2]-1]>=x[1]*10+x[0])
sum++;
}
printf("%d\n",sum);}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int date1,date2,ans=0;
int ms[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//列出每个月份对应的最大天数,注意2月份用最大29天
cin>>date1>>date2;//输入起始结束日期
d1=date1/10000, d2=date2/10000; //求出前四位,用年份枚举就可以
for(int i=d1; i<=d2; i++){ //枚举前四位年份,然后转换成月和天
int month=i%10*10+i/10%10; //将i后两位转换成月份
int day=i/100%10*10+i/1000; //将i前两位转换成天
if(month<13 && ms[month]>=day)//判断月份是否合法&&天是否合法(通过上面一维数组查询)
ans++;
}
cout<<ans<<endl;
return 0;
}
试试这个