C++练习题之计算天数
【问题描述】
定义一个结构体变量用以记录一个日期(包括年,月,日)。输入一个日期,计算该日是本年的第几天。
【输入形式】
输入日期(包括年 月 日),是三个整数,以空格分隔。
【输出形式】
输出该日是本年的第多少天。
【样例输入】
2003 3 25
【样例输出】
84
【样例说明】
输入一个日期,输出该日是本年的第几天。
题解如下:
#include <iostream>
using namespace std;
int main()
{
struct Date
{
int year;
int month;
int day;
};
struct Date d;
cin >> d.year >> d.month >> d.day;
int num = 0;
//判断
if (d.year % 4 == 0 || d.year % 400 == 0)/*闰年*/
{
for (int i = 1; i <= d.month; i++) //i指代月份
{
if(i <= 7)//前7月
{
if((i -1) != 2 && (i - 1) % 2 == 0 && i != 1)
{
num += 30;
}
else if((i-1) == 2) // i == 3 月
{
num += 29;
}
else if((i -1) % 2 != 0)
{
num += 31;
}
}
else//8月之后
{
if((i - 1) % 2 == 0 || i-1 == 7)
{
num += 31;
}
else if((i-1) % 2 != 0)
{
num += 30;
}
}
}
}
else/*平年*/
{
for (int i = 1; i <= d.month; i++)
{
if(i <= 7)//前7月
{
if((i -1) != 2 && (i - 1) % 2 == 0 && i != 1)
{
num += 30;
}
else if((i-1) == 2) // i == 3 月
{
num += 28;
}
else if((i -1) % 2 != 0)
{
num += 31;
}
}
else//8月之后
{
if((i - 1) % 2== 0 ||(i-1) == 7)
{
num += 31;
}
else if((i-1) % 2 != 0)
{
num += 30;
}
}
}
}
cout << num + d.day<<endl;
return 0 ;
}
首先判断平年和闰年以区分 2月份的天数。
然后再判断月份 。
因为i是当前月份,那么要加的 “整块的月 的 天数” 就 必须是你前一个月的所以 就要判断(i-1).
这里“整块的月 的天数”指 30 31 29 28这类的。
而且要排除掉1月份,因为给1 月份就会出现0% 2 = 0的情况,这显然是我们不需要的 。
然后写了循环,i 从 1 开始 到 你输入的月份。每次 i++ 这样就实现了 遍历每个 月份。
所以 在每次 符合条件的代码块中 用+=即可。不要 i * 30这种。 之前犯的错。
if (d.year % 4 == 0 || d.year % 400 == 0)/*闰年*/
{
for (int i = 1; i <= d.month; i++) //i指代月份
{
if(i <= 7)//前7月
{
if((i -1) != 2 && (i - 1) % 2 == 0 && i != 1)
{
num += 30;
}
else if((i-1) == 2) // i == 3 月
{
num += 29;
}
else if((i -1) % 2 != 0)
{
num += 31;
}
}
else//8月之后
{
if((i - 1) % 2 == 0 || i-1 == 7)
{
num += 31;
}
else if((i-1) % 2 != 0)
{
num += 30;
}
}
}
}
=================================================================
记录学习。