求大神指点

P2010 [NOIP2016 普及组] 回文日期

wdk20040930 @ 2017-08-26 10:04:13

#include<cstdio>
using namespace std;
int main()
{
    int Y,M,D,r,cg,endM,endD,x;
    char tempa[101],tempb[101];
    int a[21],b[21];
    int g,f;
    for(x=0;x<8;++x)
    {
        scanf("%d",&tempa[x]);
    }
    for(x=0;x<8;++x)
    {
        scanf("%d",&tempb[x]);
    }
    for(x=0;x<8;++x){a[x]=tempa[x]-48;b[x]=tempb[x]-48;}
    int flag,isU;
    int endY=1000*b[0]+100*b[1]+10*b[2]+b[3];
    if(b[4]==0)
    {
        endM=b[5];
    }
    else endM=10*b[4]+b[5];
    if(b[6]==0)
    {
        endD=b[7];
    }
    else endD=10*b[6]+b[7];
    while(1)
    {
        flag=1;
        for(r=0;r<8;r++)
        {
            if(a[r]!=a[7-r])
            {
                flag=0;
                break;
            }
        }
        if(flag ==1)
        {
            cg++;
        }
        Y=1000*a[0]+100*a[1]+10*a[2]+a[3];
        if(a[4]==0)  
        {
           M=a[5];
        }
        else
        M=10*a[4]+a[5];
        if(a[6]==0)
        {
        D=a[7];
        }
        else
        D=10*a[6]+a[7];
        int isFourth=0;
        if(Y % 4==0 && Y % 100 !=0) 
        isFourth=1;
        if(Y % 400==0) 
        isFourth=1;
        if(M==2)
        {
            if(isFourth==1)
            {
                isU=2;
            }
            else
            {
            isU=3;
            }
        }
        else
        {
        isU=0;
        switch(M)
            {
                case 1:isU=1;break;
                case 3:isU=1;break;
                case 5:isU=1;break;
                case 7:isU=1;break;
                case 8:isU=1;break;
                case 10:isU=1;break;
                case 12:isU=1;break;
            }
        }
        if(M==12 && D==31)
        {
            Y++;
            int addy=Y,data[10];
            for(int i=0;addy>0;i++)
            {
                data[i]=addy%10;addy/=10;
            }
            a[0]=data[3];
            a[1]=data[2];
            a[2]=data[1];
            a[3]=data[0];
            M=1;
            D=1;
            a[4]=0;
            a[5]=1;
            a[6]=0;
            a[7]=1;
        }
        if(isU==0)
        {
            if(D==30)
            {
                M++;
                D=1;
                a[6]=0;
                a[7]=1;
                if(M>=10)
                {
                    a[4]=1;
                    a[5]=M%10;
                }
                else
                {
                    a[4]=0;
                    a[5]=M;
                }
            }
            else
            {
                D++;
                if(10>D && D>0)
                {
                    a[6]=0;a[7]=D;
                }
                else
                {
                    if(20>D&&D>9)
                    {
                        a[6]=1;
                        a[7]=D%10;
                    }
                    else
                    {
                        if(30>D && D>19)
                        {
                            a[6]=2;
                            a[7]=D%10;
                        }
                        else
                        {
                            a[6]=3;a[7]=D%10;
                        }
                    }
                }
            }
        }
        if(isU==1)
        {
            if(D==31)
            {
                M++;
                D=1;
                a[6]=0;
                a[7]=1;
                if(M>=10)
                {
                    a[4]=1;
                    a[5]=M%10;
                }
                else
                {
                    a[4]=0;
                    a[5]=M;
                }
            }
            else
            {
            D++;
            if(10>D && D>0)
                {
                    a[6]=0;
                    a[7]=D;
                }
                else
                if(20>D && D>9)
                {
                    a[6]=1;
                    a[7]=D%10;
                }
                  else
                if(30>D && D>19)
                {
                    a[6]=2;
                    a[7]=D%10;
                }
                else
                {
                    a[6]=3;
                    a[7]=D%10;
                }
            }
        }
        if(isU==2)
        {
            if(D==29)
            {
                M++;
                D=1;
                a[6]=0;
                a[7]=1;
                if(M>=10)
                {
                       a[4]=1;
                    a[5]=M%10;
                }
                else
                {
                    a[4]=0;
                    a[5]=M;
                }
            }
            else
            {
                D++;
                if(10>D && D>0)
                 {
                    a[6]=0;a[7]=D;
                }
                else
                if(20>D && D>9)
                {
                    a[6]=1;a[7]=D%10;
                }
                else
                if(30>D && D>19)
                {
                a[6]=2;a[7]=D%10;
                }
                else
                {
                a[6]=3;a[7]=D%10;
                }
            }
        }
        if(isU==3)
        {
            if(D==28)
            {
                M++;
                D=1;
                a[6]=0;
                a[7]=1;
                {
                    if(M>=10)
                    {
                        a[4]=1;
                        a[5]=M%10;
                    }
                    else
                    {
                        a[4]=0;
                        a[5]=M;
                    }
                }
            }
            else
            {
                D++;
                if(10>D&&D>0)
                {
                    a[6]=0;a[7]=D;
                }
                else
                {
                    if(20>D && D>9)
                    {
                         a[6]=1;
                        a[7]=D%10;
                    }
                    else
                    {
                        if(30>D&&D>19)
                        {
                            a[6]=2;
                            a[7]=D%10;
                        }
                        else
                           {
                            a[6]=3;
                            a[7]=D%10;
                        }
                    }
                }
            }
        }
        if(Y>endY)break;
        {
            if(Y==endY)
            {
                if(M>endM)break;
                if(M==endM)
                {
                    if(D>endD)
                    break;
                }
            }
        }
    }
    printf("%d\n",cg);
    return 0;
}

|