日期累加

本文介绍了一个简单的程序,用于计算从给定日期开始累加特定天数后的日期。程序使用C++编写,通过判断平年与闰年,以及每月天数来实现日期的准确累加。

题目描述

设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述:

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述:

输出m行,每行按yyyy-mm-dd的个数输出。

示例1

输入

1
2008 2 3 100

输出

2008-05-13

 

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;



int days[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 all[2] = {365,366};


int type(int n) {
	// 四年一润,百年不闰  、 四百年又润
	if ( (n % 4 == 0 && n % 100 != 0) || n % 400 == 0) {
		return 1;
	} else {
		return 0;
	}
}

void getResult(int& year,int& month, int& day, int m) {
	int sum = 0;
	for (int i = 1; i < month; i++) {
		sum += days[type(year)][i];
	}
	sum += day;
	sum += m;

	// cout << sum << endl;

	month = 1;
	day = 1;

	while(sum > all[type(year)]) {
		sum -= all[type(year)];
		year++;
	}

	while(sum > days[type(year)][month]) {
		sum -= days[type(year)][month];
		month++;
	}

	day = sum;




}




void getResult2(int& year,int& month, int& day, int m) {

	m += day;

	while( m > days[type(year)][month]) {
		m -= days[type(year)][month];
		month++;
		if (month == 13) {
			year++;
			month = 1;
		}

	}

	day = m;

}




/*错误写法:*/
void getResult3(int& year,int& month, int& day, int m) {



	m += day;

	// 跨年加 有逻辑漏洞!
	while ( m > all[type(year)]) {
		m -= all[type(year)];
		year++;
	}

	while( m >= days[type(year)][month]) {
		m -= days[type(year)][month];
		month++;
	}

	day = m;

}

int main() {

	int year,month,day,m;
	int caseNum;
	cin >> caseNum;
	for (int i = 1; i <= caseNum; i++) {

		cin >> year >> month >> day >> m;
		getResult3(year,month,day,m);
		printf("%04d-%02d-%02d\n",year,month,day);


	}



}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值