#include<iostream>
#include<algorithm>
using namespace std;
int month[13][2] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
bool isLeap(int year){
return (year % 4 == 0 && year % 100 != 0) || (year % 400) == 0;
}
int main(){
int time1, y1, m1, d1;
int time2, y2, m2, d2;
while(scanf("%d%d", &time1, &time2) != EOF){
if(time1 > time2){
int temp = time1;
time1 = time2;
time2 = temp;
}
y1 = time1 / 10000, m1 = time1 % 10000 / 100, d1 = time1 % 100;
y2 = time2 / 10000, m2 = time2 % 10000 / 100, d2 = time2 % 100;
int ans = 1;
while(y1 < y2 || m1 < m2 || d1 < d2){
d1++;
if(d1 == month[m1][isLeap(y1)] + 1){
m1++;
d1 = 1;
}
if(m1 == 13){
y1++;
m1 = 1;
}
ans++;
}
printf("%d\n", ans);
}
}
input
20130101
20130105
output
5
日期处理ver2
//输入之前的日期,可以计算任意一天的星期
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
int month[13][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}};
bool isLeap(int year){
return (year % 4 == 0 && year % 100 != 0) || (year % 400) == 0;
}
int main(){
int d1, m1, y1;
int d2 = 22, m2 = 3, y2 = 2021, week = 1;
string s;
while(scanf("%d%d%d", &y1, &m1, &d1) != EOF){
while(d2 != d1 || m2 != m1 || y2 != y1){
d2--;
if(d2 == 0){
m2--;
if(m2 != 0){
d2 = month[m2][isLeap(y2)];
}else {
y2--;
m2 = 12;
d2 = month[m2][isLeap(y2)];
}
}
week--;
week = week != 0 ? week : 7;
}
printf("%d", week);
}
}
日期处理ver3
//巧妙利用日期关系进行计数,将1年1月1日设为星期一,注意isLeap的用法,日期题目不难, 但是挺麻烦的
// Day of Week
#include<iostream>
#include<algorithm>
#include<map>
#include<cstdio>
#include<cstring>
using namespace std;
bool isLeap(int year){
return (year % 4 == 0 && year % 100 != 0) || (year % 400) == 0;
}
int month[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
char a[15][20] = {"0", "January", "February", "March", "April", "May", "June", "July","Augest", "September", "October", "November", "December"};
char b[10][20] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int main(){
int d1, m1, y1, k;
char mon[20];
while(scanf("%d%s%d", &d1, mon, &y1) != EOF){
int sum = 0;
for(int i = 1; i < y1; i++){
if(isLeap(i)) sum += 366;
else sum += 365;
}
for(k = 1; k <= 12; k++){
if(strcmp(mon, a[k]) == 0) break;
}
for(int i = 1; i < k; i++){
sum += month[isLeap(y1)][i];
}
sum += d1;
if(sum % 7 == 0) printf("Sunday\n");
else printf("%s\n", b[sum % 7 - 1]);
}
}
21 December 2012
5 January 2013
Friday
Saturday