zyc_3 2022-10-13 21:05 采纳率: 33.3%
浏览 14
已结题

CSP2020儒略日调试

题目链接:https://www.luogu.com.cn/problem/P7075
调了挺久了。小一点的数字能对的,大样例对错都有,错的一般是多了一天。给代码注释了一下。

错误样例

1

543525290

正确答案为

7 8 1483409

我的答案:

8 8 1483409

前两个样例是能过的。所以我怀疑我的代码前一部分出了问题。即1582 年 10 月 4日以后有问题。

代码丑陋。

#include<bits/stdc++.h>
using namespace std;
#define rt register int 
int T,newy,newm,newd;
long long n;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int month2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){
//    freopen("julian3.in","r",stdin);
//    freopen("julian3.out","w",stdout); 
    ios::sync_with_stdio(false);
    cin>>T;
    while(T--)
    {
        cin>>n;
        if(n==2299160)cout<<4<<" "<<10<<" "<<1582<<endl;//以此为时间点 ,一共有2299160天 
        else if(n>2299160){
            newy=1582,newm=10,newd=1;n+=13;//补上不存在的天数 
            n-=2299160;//扣掉初始化用掉的天数 
            while(1){//到第几年 
                if((newy%4==0&&newy%100!=0)||newy%400==0){//闰年判断 
                    if(n>=366){
                        ++newy;n-=366;
                    }else break;//如果不够减就退出年的计算 
                }else{
                    if(n>=365){
                        ++newy;n-=365;
                    }else break;
                }
            }
            while(1){//这里是决定到第几月份 
                if((newy%4==0&&newy%100!=0)||newy%400==0)
                {
                    if(n>=month2[newm]){//month2对应闰年 
                        n-=month2[newm];++newm;
                        if(newm>12){++newy;newm=1;}//防止月份溢出 
                    }else break;//进入日的计算 
                }else{
                    if(n>=month[newm]){
                        n-=month[newm];++newm;
                        if(newm>12){++newy;newm=1;}
                    }else break;
                }
            }
                if((newy%4==0&&newy%100!=0)||newy%400==0){//计算天数 
                    newd+=n;
                    if(newd>month2[newm]){
                        newd-=month2[newm];
                        ++newm;
                        if(newm>12){++newy;newm=1;}//防溢出 
                    }
                }else{
                    newd+=n;
                    if(newd>month[newm]){
                        newd-=month[newm];
                        ++newm;
                        if(newm>12){++newy;newm=1;}
                    }
                }
        }else{
            newy=-4713,newm=1,newd=1;
            while(1){
                if((newy<0&&(-newy-1)%4==0)||newy>0&&newy%4==0){
                    if(n>=366){
                        ++newy;n-=366;
                        if(newy==0)++newy;
                    }else break;
                }else{
                    if(n>=365){
                        ++newy;n-=365;
                        if(newy==0)++newy;
                    }else break;
                }
            }
            while(1){
                if((newy<0&&(-newy-1)%4==0)||newy>0&&newy%4==0)
                {
                    if(n>=month2[newm]){
                        n-=month2[newm];++newm;
                        if(newm>12){++newy;newm=1;if(newy==0)++newy;}
                    }else break;
                }else{
                    if(n>=month[newm]){
                        n-=month[newm];++newm;
                        if(newm>12){++newy;newm=1;if(newy==0)++newy;}
                    }else break;
                }
            }
                if((newy<0&&(-newy-1)%4==0)||newy>0&&newy%4==0){
                    newd+=n;
                    if(newd>month2[newm]){
                        newd-=month2[newm];
                        ++newm;
                        if(newm>12){++newy;newm=1;if(newy==0)++newy;}
                    }
                }else{
                    newd+=n;
                    if(newd>month[newm]){
                        newd-=month[newm];
                        ++newm;
                        if(newm>12){++newy;newm=1;if(newy==0)++newy;}
                    }
                }
        }
        if(newy>0)
            cout<<newd<<" "<<newm<<" "<<newy<<endl;
        else 
            cout<<newd<<" "<<newm<<" "<<-newy<<" "<<"BC"<<endl;
    }
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月21日
    • 创建了问题 10月13日

    悬赏问题

    • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
    • ¥15 安装quartus II18.1时弹出此error,怎么解决?
    • ¥15 keil官网下载psn序列号在哪
    • ¥15 想用adb命令做一个通话软件,播放录音
    • ¥30 Pytorch深度学习服务器跑不通问题解决?
    • ¥15 部分客户订单定位有误的问题
    • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
    • ¥15 Bug traq 数据包 大概什么价
    • ¥15 在anaconda上pytorch和paddle paddle下载报错
    • ¥25 自动填写QQ腾讯文档收集表