时间限制 1000 ms 内存限制 65536 KB
题目描述
请你计算出第X年Y月Z日是第X年的第几天。其中,1月1日是第一天,1月2日是第二天,以此类推。
计算时请注意闰年的影响。对于非整百年,年数能整除4是闰年,否则不是闰年;对于整百年,年数能整除400是闰年,否则不是闰年。如1900年和1901年不是闰年,而2000年和2004年是闰年。
输入格式
第一行有一个整数T (T≤100),表示一共有T组数据需要你处理。
接下来一共有T行,每行是一个如下格式的字符串:X:Y:Z,表示你需要计算第X年Y月Z日是第X年的第几天。其中X是一个大于0,小于2100的整数。保证字符串的格式都是合法的,字符串所表示的日期也都是存在的。
输出格式
对于每组数据,你需要输出一个整数,表示所求得的结果。
输入样例
2
2013:4:12
112:4:12
输出样例
102 103
#include<iostream> using namespace std; //#define DEBUG_IN int main() { int n, i, j, flag,k = 1; int X,Y,Z;//year,month,date char m1,m2; int date[13][32]; int month[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; for(i = 1; i <= 12; i++ ){ for(j = 1; j <= month[i]; j++) date[i][j] = k++; } #ifdef DEBUG_IN if(freopen("87.txt","r",stdin) == NULL) printf("error "); #endif cin>>n; while(n--){ cin>>X>>m1>>Y>>m2>>Z; flag = (Y > 2)&&!(X%4 == 0 && X%100 || X%400 == 0); cout<<date[Y][Z] - flag<<endl; } #ifdef DEBUG_IN fclose(stdin); freopen("CON","r",stdin); #endif return 0; }
注意点:
从0开始和从1开始的统一,还是逻辑要清楚。
闰年的判断条件及其表达。
调试手段的应用,#define DEBUG_IN