推算日期 感谢帮忙
Description输入三个正整数,分别代表一个日期的年,月,日,输出这个日期的后一天的年,月,日。
Input
输入三个正整数,分别代表一个日期的年,月,日。
Output
输出这个日期的后一天的年,月,日。
Samples
input
2007 2 28
output
2007 3 1
#include <stdio.h> class Date { private: int year, month, day; int IsLeapYear(int y) { return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)); } int DaysOfMonth(int y, int m) { int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; if (IsLeapYear(y) && m == 2) return a[m - 1] + 1; return a[m - 1]; } public: Date(): year(2022), month(2), day(28) {} Date(int y,int m,int d):year(y),month(m),day(d){} void Show()const { printf("%d %d %d\n", year, month, day);//年-月-日 格式 } Date IncOneDay() { Date tmp = *this; if (day == DaysOfMonth(year, month)) { tmp.day = 1; if (month == 12){ tmp.month = 1; tmp.year++; } else { tmp.month++; } } else { tmp.day++; } return tmp; } }; int main() { int y, m, d; Date* D; printf("input\n"); scanf("%d%d%d", &y, &m, &d); D = new Date(y, m, d); printf("output\n"); D->IncOneDay().Show(); return 0; }
[此贴子已经被作者于2022-1-27 16:05编辑过]
#include <stdio.h> int IsLeapYear(int y) { return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)); } int DaysOfMonth(int y, int m) { int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; if (IsLeapYear(y) && m == 2) return a[m - 1] + 1; return a[m - 1]; } void Show(int year,int month,int day) { printf("%d %d %d\n", year, month, day);//年-月-日 格式 } void IncOneDay(int *year,int *month,int *day) { if ((*day) == DaysOfMonth(*year, *month)) { (*day) = 1; if ((*month) == 12) { (*month) = 1; (*year)++; } else { (*month)++; } } else { (*day)++; } } int main() { int y, m, d; printf("input\n"); scanf("%d%d%d", &y, &m, &d); IncOneDay(&y, &m, &d); printf("output\n"); Show(y, m, d); return 0; }
[此贴子已经被作者于2022-2-21 09:11编辑过]