题目描述:
输入年、月、日,计算该天是本年的第几天。
输入:
包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
输出:
输入可能有多组测试数据,对于每一组测试数据,
输出一个整数,代表Input中的年、月、日对应本年的第几天。
样例输入:
1990 9 20
2000 5 1
样例输出:
263
122
来源:
2003年清华大学计算机研究生机试真题
#include <cstdio>
#define isYeap(n) (n % 4 == 0 && n % 100 != 0)||(n%400 == 0) ? 1:0
int monthDay[][2]= { 0,0,31,31,28,29,31,31,30,30,31,31,30,30,31,31,31,31,
30,30,31,31,30,30,31,31};
struct Date{
int day;
int month;
int year;
void nextDay(){
if(monthDay[month][isYeap(year)] == day){
day = 1;
month ++;
if(month > 12){
month = 1;year ++;
}
}else day++;
}
};
int dic[3001][13][32];
int main(){
Date temp;
temp.day = 1;temp.month = 1;temp.year = 0;
int cnt = 0;
while(temp.year != 3001){
dic[temp.year][temp.month][temp.day] = cnt++;
temp.nextDay();
}
int y,m,d;
while(scanf("%d%d%d",&y,&m,&d) != EOF){
printf("%d\n",dic[y][m][d] - dic[y][1][1] + 1);
}
}