题目
描述:
输入年、月、日,计算该天是本年的第几天。
输入描述:
包括三个整数年(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,否则计算闰年二月份某天的总天数时,会多加一天。