#include <iostream>
using namespace std;
int GetDay(int year,int month)
{
int DayOfMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(month==2&&(year%400==0||(year % 4 == 0 && year % 100 )) )
{
return 29;
}
return DayOfMonth[month];
}
int main() {
int year;
int month;
int day;
cin>>year>>month>>day;
int sum=0;
for(int i=1;i<month;i++)
{
sum+=GetDay(year, i);
}
cout<<sum+day;
}
首先我们知道肯定是用一个数组来储存每个月的天数,更加方便。同时默认2月是28天,如果是闰年就是29。 总体的计算思路是:
1
月到month-1
月的所有天数,加上month
月的day
。使用for循环能正好契合这个思路 当然这题的思路和解法非常多,我这也只是其中一个。
int GetDay(int year, int month) {//返回一年中哪一个月的天数
int DayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && (year % 400 == 0 || (year % 4 == 0 && year % 100 )) ) {
return 29;
}
return DayOfMonth[month];
}
int Sum(int a, int b) {
int max = b;
int min = a;
int flag = 1;
if (a > b) {
flag = -1;
max = a;
min = b;
}
int day1 = min % 100;
int month1 = (min / 100) % 100;
int year1 = min / 10000;
int day2 = max % 100;
int month2 = (max / 100) % 100;
int year2 = max / 10000;
int count = 1;
while ((year1 < year2) || (month1 < month2) || (day1 < day2)) {
day1++;
if (day1 > GetDay(year1, month1)) { //如果满了当月天数
month1++;//跳到下一个月,天数变为1号
day1 = 1;
}
if (month1 == 13) { //如果满了当年月数
year1++;//跳到下一年,月数变为1月
month1 = 1;
}
count++;
}
return flag * count;
}
int main() {
int a, b;
while (cin >> a >> b) {
cout << Sum(a, b) << endl;
}
return 0;
}
}
#include <iostream>
using namespace std;
int main() {
int year, sum_day;
while (cin >> year >> sum_day) {
// 注意 while 处理多个 case
int DayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (year % 400 == 0 || (year % 4 == 0 && year % 100 ))
{
DayOfMonth[2]++;
}
int month=1;
while(sum_day>DayOfMonth[month])
{
sum_day-=DayOfMonth[month];
++month;
if(sum_day==DayOfMonth[month])
{
++month;
sum_day=1;
break;
}
}
printf("%d-%02d-%02d",year,month,sum_day);
}
}
#include <cfloat>
#include <iostream>
using namespace std;
int GetDay(int year, int month) //返回一年中哪一个月的天数
{
int DayOfMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && (year % 400 == 0 || (year % 4 == 0 && year % 100 )) )
{
return 29;
}
return DayOfMonth[month];
}
int main()
{
int num;
cin>>num;
while (num--)
{
int year, month, day,add_day;
cin >> year >> month >> day>>add_day;
while(add_day--)
{
++day;
if (day > GetDay(year, month))
{
++month;
day=1;
}
if(month==13)
{
year++;
month=1;
}
}
printf("%d-%02d-%02d\n",year,month,day);
}
return 0;
}
这题大家要注意题目的输入和输出要求,我自己在这上面浪费了好多多少。
今天就到这里啦!