蓝桥杯题目
计算后续日期
题目描述
我们经常要计算,从今天往后N天之后是哪一天(哪年哪月哪日)。现在我们就可以编写一个程序,推算指定日期之后的第N天是什么日期。
程序源码
#include<iostream> #include<iomanip> using namespace std; int a[2][12] = {
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, {
31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; int b[2] = {
365,366 }; int judge(int a)//是否是闰年,是则返回1,不是则返回0 {
if ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)return 1; else return 0; } //返回从1年1月1日开始(包括当天)到输入天数(不包括当天)所经历的天数 int days_1(int year, int month, int day) {
int sum = 0; for (int i = year; i > 1; i--) {
sum += b[judge(i)]; } for (int j = month; j > 1; j--) {
sum += a[judge(year)][j - 1]; } sum += day - 1; return sum; } //输入n(n大于0),则返回从1年1月1日(包括当天)开始经过了n天后的日期(不包括当天) void days_2(int sum, int &year, int &month, int &day) {
for (year = 1; sum >= b[judge(year)]; year++) {
sum -= b[judge(year)]; } for (month = 0; sum >= a[judge(year)][month]; month++) {
sum -= a[judge(year)][month]; } month++; day = sum + 1; return; } int main() {
int year, month, day, n; while (cin >> year >> month >> day >> n) {
n+= days_1(year, month, day); days_2(n, year, month, day); cout << year << "." << month << "." << day << endl; } return 0; }
测试结果
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233008.html原文链接:https://javaforall.net