题目1070:今年的第几天?
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:6111
解决:3381
-
题目描述:
-
输入年、月、日,计算该天是本年的第几天。
-
输入:
-
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
-
输出:
-
输入可能有多组测试数据,对于每一组测试数据,输出一个整数,代表Input中的年、月、日对应本年的第几天。
-
样例输入:
-
1990 9 20 2000 5 1
-
样例输出:
-
263 122
-
#include <iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; #define ISYEAP(x) x%100!=0&&x%4==0||x%400==0?1:0 int dayOfMonth[13][2]= { {0,0},//0 {31,31},//1 {28,29},//2 {31,31},//3 {30,30},//4 {31,31},//5 {30,30},//6 {31,31},//7 {31,31},//8 {30,30},//9 {31,31},//10 {30,30},//11 {31,31}//12 }; struct Date { int Day; int Month; int Year; void nextDay() { Day++; if(Day>dayOfMonth[Month][ISYEAP(Year)]) { Day=1; Month++; if(Month>12) { Month=1; Year++; } } } }; int buf[4000][13][32]; int Abs(int x) { return x<0?-x:x; } int main() { Date tmp; int cnt=0; tmp.Day=1; tmp.Month=1; tmp.Year=0; while(tmp.Year!=4000) { buf[tmp.Year][tmp.Month][tmp.Day]=cnt; tmp.nextDay(); cnt++; } int y,m,d; while(scanf("%d %d %d",&y,&m,&d)!=EOF) { int n= buf[y][m][d]-buf[y][1][1]; n+=1; printf("%d\n",n); } return 0; }