pltdhll特别喜欢的日期是6月15日,因为这是一年中最中间的一天(pltdhll认为6是12的一半,15是30的一半,所以6月15日是一年最中间的一天)。
同时他也有其他喜欢的日期,比如2022年3月19日也就是今天,因为这是成都信息工程大学第一届团体程序设计天梯赛校赛的举办时间。
他突然想知道某个日期和今天相差的天数,但是手算太麻烦了,写代码的话他感觉代码量太多了,刚好今天遇见了正在看题干的你,想请你帮他完成这个程序。有些日期太久远了,所以你只需要保证你的程序在1905年初(1905年01月01日)到2995年底(2995年12月31日)的正确性即可。
你的程序只要计算出pltdhll给你的日期与今天相差的天数,然后给出相应的提示语句即可。
注意,今天是2022
年3
月19
日!
注意,今天是2022
年3
月19
日!
注意,今天是2022
年3
月19
日!
提示:闰年是公历中的名词,分为普通闰年和世纪闰年。公历年份是4的倍数的,且不是100的倍数,为普通闰年;公历年份是整百数的,必须是400的倍数才是世纪闰年。
输入格式:
在一行中给出一个八位数的日期,其格式为yyyymmdd
,yyyy
表示年,mm
表示月,dd
表示天。
题目保证所给日期在1905年初(1905年01月01日)到2995年底(2995年12月31日)之间。
输出格式:
根据下面提示以及相差的天数打印出相应的内容。
若所给日期在今天之前,则输出guo qv xx tian
,其中xx
表示相差天数。
若所给日期在今天之后,则输出hai you xx tian
,其中xx
表示相差天数。
若所给日期就是今天,则输出jiu shi jin tian!
输入样例1:
20220319
输出样例1:
jiu shi jin tian!
输入样例2:
20220615
输出样例2:
hai you 88 tian
输入样例3:
20210615
输出样例3:
guo qv 277 tian
#include<stdio.h>
int year;
int month;
int day;
int judge(void);//判断与今天的关系
int bigger(void);//日期>今天
int lower(void);//日期<今天
int leapyear[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };//闰年
int commonyear[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//平年
int main(void)
{
int dete = 0;//差值
int i;
char str[9];
fgets(str, 9, stdin);
str[8] = '\0';
//将输入的字符串转化为对应数字日期
year = (str[0] - '0') * 1000 + (str[1] - '0') * 100 + (str[2] - '0') * 10 + (str[3] - '0') * 1;
month = (str[4] - '0') * 10 + (str[5] - '0') * 1;
day = (str[6] - '0') * 10 + (str[7] - '0') * 1;
dete = judge();
//通过判断dete的值选择输出
if (dete > 0)
{
printf("hai you %d tian", dete);
}
else if (dete < 0)
{
printf("guo qv %d tian", -dete);
}
else if (dete == 0)
{
printf("jiu shi jin tian!");
}
return 0;
}
//判断与 2022-3-19的大小关系,并通过bigger();和lower();对差值dete进行赋值
int judge(void)
{
int dete = 0;
if (year == 2022 && month == 3 && day == 19)
{
dete = 0;
}
else if (year > 2022)
{
dete = bigger();
}
else if (year < 2022)
{
dete = lower();
}
else if (year == 2022)
{
if (month > 3)
{
dete = bigger();
}
else if (month < 3)
{
dete = lower();
}
else if (month == 3)
{
if (day > 19)
{
dete = bigger();
}
else if (day < 19)
{
dete = lower();
}
}
}
return dete;
}
int bigger()
{
int i;
int dete = 0;
//年份>2022
if (year > 2022)
{
for (i = 2022; i < year; i++)
{
//2022-year-1年每年的天数
if ((i % 400 == 0) || (i % 4 == 0 && i % 100 != 0))
{
dete += 366;
}
else
{
dete += 365;
}
}
//year年时每月的天数
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
for (i = 1; i < month; i++)
{
dete += leapyear[i];
}
}
else
{
for (i = 1; i < month; i++)
{
dete += commonyear[i];
}
}
//加上第month月天数-78(1.1-3.19的总天数)
dete += day;
dete -= 78;
}
//年份 == 2022
else if (year == 2022)
{
//1-month-1月的总天数
for (i = 1; i < month; i++)
{
dete += commonyear[i];
}
//加上第month月天数-78(1.1-3.19的总天数)
dete += day;
dete -= 78;
}
//返回相差天数dete
return dete;
}
//year<2022
int lower()
{
int i;
int dete = 0;
//年份<2022
if (year < 2022)
{
for (i = year; i < 2022; i++)
{
//year-2021年每年的天数
if ((i % 400 == 0) || (i % 4 == 0 && i % 100 != 0))
{
dete += 366;
}
else
{
dete += 365;
}
}
//year年时1-month-1每月的天数
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
for (i = 1; i < month; i++)
{
dete -= leapyear[i];
}
}
else
{
for (i = 1; i < month; i++)
{
dete -= commonyear[i];
}
}
//减去第year年month月的天数+78
dete -= day;
dete += 78;
}
//年份 == 2022
else if (year == 2022)
{
//1-month-1月的总天数
for (i = 1; i < month; i++)
{
dete -= commonyear[i];
}
//减去第month月天数+78
dete -= day;
dete += 78;
}
//返回相差天数dete
return -dete;
}