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

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

   有一天小明发现了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 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件