社区讨论
求找错..在某OJ上WA
P2010[NOIP 2016 普及组] 回文日期参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yl2iz
- 此快照首次捕获于
- 2025/11/21 05:44 4 个月前
- 此快照最后确认于
- 2025/11/21 05:44 4 个月前
luogu上AC了,然而某OJ上WA
求找错
CPP#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char a[10],b[10],s[10];
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int cnt,ys,yf,ms,mf,ds,df;
int con(char x[],int y,int z)//将字符串转为数字
{
int s=0;
for(int i=y;i<=z;i++)
{
s+=int(x[i]-'0')*pow(10,double(z-i));
}
return s;
}
void cons(int x,int y,int z)//将数字转为字符串
{
for(int i=y;i<=z;i++)
{
s[i]=char((x/int(pow(10,double(z-i))))%10)+'0';
}
return;
}
bool check(char x[],char y[])//判断字符是否回文
{
char z[10];
int c=0;
for(int i=7;i>=0;i--)
z[c++]=y[i];
z[c]='\0';
if(strcmp(z,x)==0)
return 1;
else
return 0;
}
bool run(int y)
{
if((y%4==0&&y%100!=0)||y%400==0)
return 1;
else
return 0;
}
bool ok(int y,int md)
{
int m,d;
m=md/1000%10*10+md/100%10;
d=md/10%10*10+md%10;
if(y==ys)
{
if(m<ms||(m==ms&&d<ds))
return 0;
}
if(y==yf)
{
if(m>mf||(m==mf&&d>df))
return 0;
}
if(m>=1&&m<=12)
{
if(m==2)
{
if(run(y))
{
if(d>=1&&d<=mon[m]+1)
{
return 1;
}
}
}
if(d>=1&&d<=mon[m])
{
return 1;
}
}
return 0;
}
int main()
{
cin>>a>>b;
int i,j,t;
char m[5];
ys=con(a,0,3);
yf=con(b,0,3);
ms=con(a,4,5);
mf=con(b,4,5);
ds=con(a,6,7);
df=con(b,6,7);
if(ys==yf&&ms==mf&&ds==df)
{
if(check(a,b))
{
cout<<1;
return 0;
}
else
{
cout<<0;
return 0;
}
}
for(i=ys;i<=yf;i++)
{
t=0;
cons(i,0,3);
for(j=3;j>=0;j--)
{
m[t++]=s[j];
}
t=con(m,0,3);
if(ok(i,t))
{
cnt++;
}
}
cout<<cnt;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...