未完成, (学习学长的处理年月日的方式)

来源:互联网 发布:淘宝模板设计师赚钱吗 编辑:程序博客网 时间:2024/05/25 01:34


代码不知道哪个细节错了。。、下次再要独立敲


#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=10005;int Month[2][13]={    {0,31,28,31,30,31,30,31,31,30,31,30,31},    {0,31,29,31,30,31,30,31,31,30,31,30,31},};int sumyear[maxn];inline int yeap(int x){    return x%400==0||x%100!=0&&x%4==0;}int cal(int x){    int ret=0;    while(x){        ret+=x%10==9;        x/=10;    }    return ret;}void init(){    sumyear[0]=66;    for(int i=1;i<=9999;++i){        sumyear[i]=sumyear[i-1]+65+365*cal(i);        if(yeap(i))sumyear[i]+=1+cal(i);    }}int gao(int Y,int M,int D){    int ret=sumyear[Y-1];int run=yeap(Y);int t=cal(Y);    for(int i=1;i<M;++i)ret+=Month[run][i];    ret+=D*t;    if(M==9)ret+=D;    else if(M>9)ret+=30;    ret+=(M-1)*3;if(!run&&M-1>=2)ret--;    if(D>=29){        ret+=3;if(M==2&&!run)ret--;    }    else if(D>=19)ret+=2;    else if(D>=9)ret+=1;    return ret;}int main(){    int t;    scanf("%d",&t);    init();    while(t--){        int sy,sm,sd,ey,em,ed;        scanf("%d%d%d%d%d%d",&sy,&sm,&sd,&ey,&em,&ed);        printf("%d\n",gao(ey,em,ed)-gao(sy,sm,sd)+cal(sy*10000+sm*100+sd));    }}


#include<iostream>#include<string>#include<cstring>#include<algorithm>#include<cstdio>#include<iostream>#include<string>#define bug1 cout<<"bug1"<<endl;using namespace std;#define inf 0x3f3f3f3f#define sf scanf#define pf printf#define mem(a,b) memset(a,b,sizeof(b));const int maxn=10005;int sumyear[maxn];int month[2][13]={    {0,31,28,31,30,31,30,31,31,30,31,30,31},    {0,31,29,31,30,31,30,31,31,30,31,30,31}};inline int yeap(int x){     if(x%400==0||x%4==0&&x%100!=0)return 1;     return 0;}inline int single(int x){    int ret=0;    while(x){        if(x%10==9)ret++;        x/=10;    }    return ret;}int solve(int y,int m,int d){    int ret=0;    ret+=sumyear[y-1];    int run=yeap(y);    int singley=single(y);    for(int i=1;i<m;++i){        ret+=singley*month[run][i];        ret+=3;    }    ret+=singley*d;    if(m==9)ret+=d;    else if(m>9)ret+=30;//改了那么多次,,自己居然没有。。    if(!run&&m>2)ret--;    if(d>=29){        ret+=3;        if(!run&&m==2)ret--;//这个地方我要注意下。。    }    else if(d>=19)ret+=2;    else if(d>=9)ret+=1;    return ret;}int main(){    int T;    sf("%d",&T);    sumyear[0]=66;//注意,自己一开始没有实在这里设置。    for(int i=1;i<=9999;++i){        sumyear[i]=sumyear[i-1]+65+365*single(i);        if(yeap(i))sumyear[i]+=single(i)+1;    }    while(T--){        int sy,sm,sd,ey,em,ed;        sf("%d%d%d%d%d%d",&sy,&sm,&sd,&ey,&em,&ed);        pf("%d\n",solve(ey,em,ed)-solve(sy,sm,sd)+single(sy*10000+sm*100+sd));    }}




0 0
原创粉丝点击