给定日期求对应的星期 (日期从1900.1.1 星期一开始)

来源:互联网 发布:js获取当前日期 编辑:程序博客网 时间:2024/06/03 18:08
#include <iostream>#include <string>#include <cassert>using namespace std;/* * [1900, year] 之间闰年的数目*/int num_of_leapyear(int year);int main(){const int month[13] = {0, 31, 28, 31, 30, 31,    30, 31, 31, 30, 31,   30, 31};int pre[13] = {0};  /* store the pre sum */string text[7] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};for (int i = 1; i <= 12; i++){pre[i] = pre[i-1] + month[i-1];}int y, m, d;while(cin >> y >> m >> d){assert(y > 1900);assert(m > 0 && m < 13);assert(d > 0 && d < month[m]);int days;days = (y - 1900) * 365 + pre[m] + d;//days += (y - 1900) / 4;   /* There is problem here we need to solve */days += num_of_leapyear(y);if ( (y % 400 == 0) || (y % 100 != 0 && y % 4 == 0)){if (m < 3)days--;}cout << text[days%7] << "\n";}return 0;}
做了一些测试都是正确的,手中没有万年历2400 后面的没测。希望大家补充。
原创粉丝点击