codeup
日期处理
B
我用的是vs2017
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
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} };
char dayOfWeek[7][20] = { "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday" };
char monthOfYear[13][20] = { "","January","February","March","April","May","June","July","August","September","October","November","December" };
bool isLeap(int year)
{
return(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int difTime(int y1, int m1,int d1)
{
int y2=1, m2=1, d2=1;//这里公历1年1月1日为星期一
int num1 = y1 * 10000 + m1 * 100 + d1;
int num2 = y2 * 10000 + m2 * 100 + d2;
if (num1 > num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
y1 = num1 / 10000; m1 = num1 % 10000 / 100; d1 = num1 % 100;
y2 = num2 / 10000; m2 = num2 % 10000 / 100; d2 = num2 % 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++;
}
return ans;//返回日期差值
}
int main()
{
char month[20];
int d, y,num,n;
while (scanf_s("%d %s %d", &d, month, sizeof(month),&y) != EOF)//vs里要用scanf_s代替scanf
{
for (int i = 0; i < 13; i++)
{
if (strcmp(month, monthOfYear[i]) == 0)//返回两个字符串的大小比较结果
{
num = i;
break;
}
}
n = difTime(y, num, d);
puts(dayOfWeek[(n-1) % 7]);//数组下标从0开始
}
system("pause");//这里是为了避免运行时窗口一闪就消失了
return 0;
}