文章

74

粉丝

0

获赞

94

访问

8.3k

头像
压缩日期 (采用位运算)题解:
P1936 华中科技大学2022年机试题
发布于2025年8月29日 21:37
阅读数 27

#include<bits/stdc++.h>
using namespace std;

// 判断闰年
int isLeapYear(int y) {
    if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) return 1;
    else return 0;
}

// 每个月的最大天数,[0]平年,[1]闰年
int maxDay[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 main(){
    int year, month, day;
    while(cin >> year >> month >> day) {
        // 确保不超过当月最大天数
        int leap = isLeapYear(year);
        if(day > maxDay[leap][month]) {
			cout << maxDay[leap][month] << endl;
			continue;
		}
        
        // 只取年份后两位
        int year2 = year % 100;
        
        // 正确的位运算:年(7位)左移9位,日(5位)左移4位,月(4位)在最低位
        int ans = (year2 << 9) | (day << 4) | month;
        
        cout << ans << endl;
    }
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发