美文网首页C++编程基础与算法实例
4、C++基础:日期类问题(2)

4、C++基础:日期类问题(2)

作者: blueskylxb | 来源:发表于2016-11-16 16:21 被阅读40次

给定一个日期,求出该日为星期几(已知2002-3-28为星期四)

#include <iostream>
using namespace std;

#define ISYEAP(x) ((x%100!=0 && x%4==0) || x%400==0) ? 1 : 0

// 预存每月的天数,注意二月配合宏定义做特殊处理
int dayOfMonth[13][2] = {
  0,0,
  31,31,
  28,29,
  31,31,
  30,30,
  31,31,
  30,30,
  31,31,
  31,31,
  30,30,
  31,31,
  30,30,
  31,31
};

struct Date{
  int Day;
  int Month;
  int Year;
  void nextDay(){
    Day++;
    if(Day > dayOfMonth[Month][ISYEAP(Year)]){
      Day = 1;
      Month++;
      if(Month>12){
        Month = 1;
        Year++;
      }
    }
  }
};

int buf[3001][13][32]; // 保存预处理的天数
char monthName[13][20] = {
  "",
  "January",
  "February",
  "March",
  "April",
  "May",
  "June",
  "July",
  "August",
  "September",
  "October",
  "November",
    "December"
}; // 月名

char weekName[7][20] = {
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
}; // 周名

int main(void){
  Date tmp;
    int cnt = 0;
    tmp.Day = 1;
    tmp.Month = 1;
    tmp.Year = 0;

    // 预处理出每一天与原点日期的天数差
    while(tmp.Year != 3001){
      buf[tmp.Year][tmp.Month][tmp.Day] = cnt;
      tmp.nextDay();
      cnt++;
    }

    cout << "输入年 月 日" << endl;
    cin >> tmp.Year >> tmp.Month >> tmp.Day;

    int days = buf[tmp.Year][tmp.Month][tmp.Day] - buf[2002][3][28]; // 已知2002-3-28为星期四

    cout << weekName[((days+4)%7+7)%7] << endl;

    return 0;

}

相关文章

  • 4、C++基础:日期类问题(2)

    给定一个日期,求出该日为星期几(已知2002-3-28为星期四)

  • 3、C++基础:日期类问题(1)

    定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题) 参考:http://blog...

  • C++面向对象基础(二)

    目录 C++ 基础(一) C++面向对象基础(二) 一、类 C++ 中可以使用 struct、class 来定义一...

  • C++ — 类 & 对象超详解

    C++ 类 & 对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ ...

  • C++零基础教程之类和对象初识

    C++ 类和对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核...

  • C++面向对象

    C++类和对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心...

  • C++ 类 & 对象

    原文地址:C++ 类 & 对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是...

  • NDK开发—C++面向对象编程(四)

    类 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,用户定...

  • CPP基础:面向对象编程

    面向对象编程 类 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核...

  • 2022-08-01# 面向对象编程

    类 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,用户定...

网友评论

    本文标题:4、C++基础:日期类问题(2)

    本文链接:https://www.haomeiwen.com/subject/qverpttx.html