目录
1.日期累加
1.1题目描述
1.2思路
1.3
2.打印日期
2.1题目描述
2.2思路
2.3代码
1.日期累加
1.1题目描述
计算一个日期加上若干天后是什么日期。输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。输出m行,每行按yyyy-mm-dd的个数输出。
示例:
1.2思路
这里先需要写一个判断该月天数的函数,利用数组存平年十二个月每月的天数,如果是闰年且为二月再++;接下来就是将天数直接和日期的天数相加(如上图:3+100=103),再去判断这个天数是否大于该月天数,是的话,就减去该月天数,再月份++,直到这个天数小于该月天数,就输出,题目还要求多组输入,所以还要在最外层加一个while循环。
1.3
#include <iostream>
using namespace std;int Getmonth(int year,int month)
{static int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(((year%4==0&&year%100!=0)||year%400==0)&&month==2)return 29;return arr[month];
}
int main() {int a;cin>>a;while (a--) { int year,month,day,date;cin>>year>>month>>day>>date;day+=date;while(day>Getmonth(year, month)){day-=Getmonth(year,month++);if(month==13){year++;month=1;}} printf("%04d-%02d-%02d\n",year,month,day); }
}
2.打印日期
2.1题目描述
给出年分m和一年中的第n天,算出第n天是几月几号。输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
示例:
2.2思路
这里总体思路和上题一样,用天数直接和该月相比,大于就减去该月天数,再月份++,直到小于该月天数,也可以直接利用从一月到该月一共的天数的数组,分为闰年和平年,再去依次判断,再用天数减去这个一月到该月一共的天数,就可以得到日期。
2.3代码
#include <iostream>
using namespace std;
static int arr1[13]={0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
static int arr2[13]={0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
int Getmday(int year,int n)
{if((year%4==0&&year%100!=0)||year%400==0){for(int i=1;i<=13;i++){if(n<=arr2[i])return i;}}else {for(int i=1;i<=13;i++){if(n<=arr1[i])return i;}}return 0;
}int main() {int a, b;while (cin >> a >> b) { // 注意 while 处理多个 caseint month=Getmday(a,b);int days=0;if((a%4==0&&a%100!=0)||a%400==0)days=b-arr2[month-1];elsedays=b-arr1[month-1];printf("%04d-%02d-%02d\n",a,month,days);}
}