题目
描述:
输入年、月、日,计算该天是本年的第几天。
输入描述:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出描述:
输入可能有多组测试数据,对于每一组测试数据, 输出一个整数,代表Input中的年、月、日对应本年的第几天。
题解
首先要注意到闰年的二月份有29天,所以在计算天数之前需要判断当前年份是否为闰年。闰年的判断条件是,能被400整除或者能被4整除但不能被100整除。为了方便计算,将每个月份的天数保存到一维数组中,计算时只需读出保存的数据进行累加即可。这里数组大小为13是为了保持数组下标和月份对应,方便计算。
#include <stdio.h> int main() { int year = 0,month = 0,day = 0; int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int days = 0; while(scanf("%d %d %d",&year,&month,&day) != EOF) { //判断是否为闰年 if((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) { months[2] = 29; //days += 1; } for(int i = 0; i < month; i++) { days += months[i]; } days += day; printf("%d\n",days); } return 0; }
另外,当前年份为闰年时建议直接将数组对应月份天数修改,而不是总天数加1,否则计算闰年二月份某天的总天数时,会多加一天。