题目描述
设计一个程序能计算一个日期加上若干天后是什么日期。
输入描述:
输入第一行表示样例个数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);
}
}
本文介绍了一个简单的程序,用于计算从给定日期开始累加特定天数后的日期。程序使用C++编写,通过判断平年与闰年,以及每月天数来实现日期的准确累加。

116

被折叠的 条评论
为什么被折叠?



