题目描述:
输入年、月、日,计算该天是本年的第几天。
输入:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
样例输入:
1990 9 20
2000 5 1
样例输入:
263
122
编程思路:
计算输入的日期是今年的第几天的思路很简单,代码的主要核心就在于判断该年是否为闰年,首先闰年的定义是:1.年份是4的倍数,且不是100的倍数(例如2004年是闰年);2.年份是400的倍数(例如1900年不是闰年)。我们只需要运用逻辑运算分别对这两种情况进行讨论即可。然后主函数的思路是,首先判断月数是否为一月或者二月,如果是就不用判断闰年,直接计算该月以前的天数总和,再加上该月的号数就可以得到结果;否者就需要抉择是否为闰年,闰年多加一天,后面过程和前面一样。
程序实现:
#include <iostream>
#include<string>
using namespace std;
bool fun(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断是否为闰年
return true;
else return false;
}
int main()
{
int data[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//记录平年每月的天数
while (1) {//输入多组数据
int year, month, day;
int answer=0;
cin >> year >> month >> day;//输入年月日
if (month <= 2) { //二月以前不用考虑闰年
for (int i = 0; i < month - 1; i++){//把该月以前的天数加上
answer+=data[i];
}
}
else {
for (int i = 0; i < month - 1; i++) {
answer += data[i];
}
if (fun(year))//如果是闰年多加一天
answer++;
}
cout << answer + day << endl;//结果加上当月的天数,输出这是这一年的第几天
}
return 0;
}