KY258 日期累加
依次根据月份判断天数,再根据天数修改月份,最后根据月份修改年份,下面两题思路类似
#include <iostream>
#include <iomanip>
#include <set>
using namespace std;
bool isLeapYear(int year) {
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) return true;
else return false;
}
int main()
{
int m;
cin >> m;
set<int> bigMonth = { 1,3,5,7,8,10,12 };
while (m > 0) {
int year, month, day;
int num;
cin >> year >> month >> day >> num;
while (num > 0) {
day++;
num--;
if (bigMonth.find(month) != bigMonth.end()) {
if (day > 31) {
month++;
day = 1;
}
}
else if (month==2) {
if (isLeapYear(year)) {
if (day > 29) {
month++;
day = 1;
}
}
else {
if (day > 28) {
month++;
day = 1;
}
}
}
else {
if (day > 30) {
month++;
day = 1;
}
}
if (month > 12) {
year++;
month = 1;
}
}
cout << year << "-" << right << setw(2) << setfill('0') << month << "-" << right << setw(2) << setfill('0') << day << endl;
m--;
}
}
KY250 日期类
#include <iostream>
#include <iomanip>
#include <set>
using namespace std;
bool isLeapYear(int year) {
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) return true;
else return false;
}
int main()
{
int m;
cin >> m;
set<int> bigMonth = { 1,3,5,7,8,10,12 };
while (m > 0) {
int year, month, day;
int num;
cin >> year >> month >> day;
day++;
if (bigMonth.find(month) != bigMonth.end()) {
if (day > 31) {
month++;
day = 1;
}
}
else if (month==2) {
if (isLeapYear(year)) {
if (day > 29) {
month++;
day = 1;
}
}
else {
if (day > 28) {
month++;
day = 1;
}
}
}
else {
if (day > 30) {
month++;
day = 1;
}
}
if (month > 12) {
year++;
month = 1;
}
cout << year << "-" << right << setw(2) << setfill('0') << month << "-" << right << setw(2) << setfill('0') << day << endl;
m--;
}
}
KY111 日期差值
#include <iostream>
#include <iomanip>
#include <set>
using namespace std;
bool isLeapYear(int year) {
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) return true;
else return false;
}
int main()
{
set<int> bigMonth = { 1,3,5,7,8,10,12 };
int s1, s2;
int year, month, day;
int year2, month2, day2;
int num = 1;
cin >> s1;
cin >> s2;
year = s1 / 10000;
year2 = s2 / 10000;
month = s1 / 100 % 100;
month2 = s2 / 100 % 100;
day = s1 % 100;
day2 = s2 % 100;
while (!(year == year2 && month == month2 && day == day2)) {
day++;
num++;
if (bigMonth.find(month) != bigMonth.end()) {
if (day > 31) {
month++;
day = 1;
}
}
else if (month == 2) {
if (isLeapYear(year)) {
if (day > 29) {
month++;
day = 1;
}
}
else {
if (day > 28) {
month++;
day = 1;
}
}
}
else {
if (day > 30) {
month++;
day = 1;
}
}
if (month > 12) {
year++;
month = 1;
}
}
cout << num;
}