进阶PAT 2022-12-10 23:40 采纳率: 78.4%
浏览 95
已结题

关于时间计算器的一个编程问题

   有一天小明发现了time()函数,time()函数返回一个整数,表示从197011000秒到运行这一程序经过的秒数,当然关于求当前时刻还有很多相关的函数等待你去发现。现在m队长想要创建自己的mfc_time函数,mfc_time()表示自某个时刻开始经过t秒之后的时刻,例如200011000秒经过3600秒之后的时刻为200011100秒,我们以标准日期的形式进行输出,月,日,时间,年份。详细输出规则见输入输出样例。关于日期的写法:1号,2号,3号,21号,22号,23号,31号的缩写均为“日期数+stndrd(firstsecondthird的后两个字母) ”,其余的日子缩写均为“数字+th”。错误样例已经进行了修正,同学们可以重新进行提交。
   各个月份缩写:一月Jan,二月Feb,三月Mar,四月Apr,五月May,六月Jun,七月Jul,八月Aug,九月Sept,十月Oct,十一月Nov,十二月Dec

输入
第一行输出一个数字n,表示有n组测试数据。接下来n行,每行7个整数,前六个整数表示一个时刻(年月日时分秒),最后一个整数t,表示从这个时刻开始经过了t秒。
输出
输出n行,每行输出一个时刻(年月日时分秒),标准日期格式,详细格式参考输入输出样例。

样例输入
3
2000 1 1 0 0 0 3600
2000 2 28 23 59 59 1
2000 1 1 0 0 0 123456789
样例输出
Jan 1st 01:00:00 2000
Feb 29th 00:00:00 2000
Nov 29th 21:33:09 2003

提示
数据1:2000年1月1日0时0分0秒经过3600秒以后是2000年1月1日1时0分0秒
数据2:2000年2月28日23时59分59秒经过1秒以后是2000年2月29日0时0分0秒,因为2000年是闰年。
我们保证读入的初始时间是合法的,年份在公元1000年到公元2022年之间。经过秒数t<=1010。

  • 写回答

4条回答 默认 最新

  • qfl_sdu 2022-12-10 23:47
    关注

    运行结果:

    img

    代码:

    #include <iostream>
    using namespace std;
    int isleapyear(int y)
    {
        if(y%4==0 && y%100!=0 || y%400==0)
            return 1;
        else
            return 0;
    }
    int main()
    {
        int i,n;
        int y,m,d,h,mi,s;
        int t;
        char mon[13][10] ={"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
        int dd[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        char days[32][10]={"","1st","2nd","3rd","4th","5th","6th",
            "7th","8th","9th","10th","11th","12th","13th",
            "14th","15th","16th","17th","18th","19th",
            "20th","21st","22nd","23rd","24th","25th",
            "26th","27th","28th","29th","30th","31st"};
        cin >> n;
        for(i=0;i<n;i++)
        {
            cin >> y >> m>>d >>h>>mi>>s >> t;
            s+=t;
            mi += s/60;
            s = s%60;
            h += mi/60;
            mi = mi%60;
            d += h/24;
            h = h%24;
            if(isleapyear(y))
                dd[2] = 29;
            else
                dd[2] = 28;
            while(d > dd[m])
            {
                if(isleapyear(y))
                    dd[2] = 29;
                else
                    dd[2] = 28;
                d -= dd[m];
                m++;
                if(m>12)
                {
                    y +=1;
                    m = 1;
                }
            }
            printf("%s %s %02d:%02d:%02d %d\n",mon[m],days[d],h,mi,s,y);
        }
        return 0;
    }
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月11日
  • 已采纳回答 12月11日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码