1 条题解

  • 0
    @ 2026-1-28 14:43:23
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        // [1] 输入变量:y-年,m-月,d-日,h-时,k-要增加的小时数
        int y,m,d,h,k,n;
        cin>>y>>m>>d>>h>>k;
    
        // [2] 判断当前月份m的天数n,处理闰年2月的特殊情况
        if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12){
            n=31; // 大月有31天
        }else if(m==4 || m==6 || m==9 || m==11){
            n=30; // 小月有30天
        }else if(m==2 && (y%400==0 || (y%100!=0 && y%4==0))){
            n=29; // 闰年的2月有29天
        }else{
            n=28; // 平年的2月有28天
        } 
    
        // [3] 定义时间进位变量:h_2-最终小时,h_3-小时进位到天的数量;d_2-最终天数,d_3-天进位到月的数量;m_2-最终月份,m_3-月进位到年的数量;y_2-最终年份
        int h_2=0,h_3=0,d_2=0,d_3=0,m_2=0,m_3=0,y_2=0; 
    
        // [4] 计算小时部分:最终小时为(h+k)模24,进位天数为(h+k)除以24的商
        h_2=(h+k)%24;
        h_3=(h+k)/24;
    
        // [5] 计算天数部分:判断天数加进位后是否超过当月天数
        if(d+h_3>n){
            d_2=(d+h_3)%n; // 最终天数为天数加进位后模当月天数
            d_3=(d+h_3)/n; // 进位到月的数量为天数加进位后除以当月天数的商
        }else{
            d_2=d+h_3; // 未超过则天数直接相加
        }
    
        // [6] 计算月份部分:判断月份加进位后是否超过12
        if(m+d_3>12){
            m_2=(m+d_3)%12; // 最终月份为月份加进位后模12
            m_3=(m+d_3)/12; // 进位到年的数量为月份加进位后除以12的商
        }else{
            m_2=(m+d_3); // 未超过则月份直接相加
        }
    
        // [7] 计算年份部分:最终年份为原年份加月份进位的数量
        y_2=y+m_3;
    
        // [8] 输出最终的年、月、日、时
        cout<<y_2<<" "<<m_2<<" "<<d_2<<" "<<h_2; 
        return 0;
    }
    
    • 1

    信息

    ID
    945
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者