题目描述:高斯日记 大数学家高斯有个好习惯:无论如何都要写日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻
提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
解决算法:
从高斯出生那一天起,一直增加天数。直至增加到指定天数,即可得出当前日期(^-^很笨的算法)。
贴代码:
--------------------------------华丽分割线---------------------------------
#include<stdio.h>
/**
*功能:判断是否为闰年
*参数说明:
*@year: 年数
*返回值: 是闰年返回1,否则返回0
*/
int IsLeapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
return 1;
}
else
return 0;
}
/**
*功能: 天数为31天的月份增加一天
*参数说明:
*@pYear, @pMonth, @pDay 返回增加一天后的年月日
*/
void BigMonthAddOneDay(int *pYear, int *pMonth, int *pDay)
{
(*pDay)++;
if (*pMonth == 12 && *pDay == 32)
{
(*pYear)++;
*pMonth = 1;
*pDay = 1;
}
else if (*pDay == 32)
{
(*pMonth)++;
*pDay = 1;
}
}
/**
*功能: 天数为30天的月份增加一天
*参数说明:
*@pMonth, @pDay 返回增加一天后的月日,因为不会影响到年份所以不需要年份参数
*/
void SmallMonthAddOneDay(int *pMonth, int *pDay)
{
(*pDay)++;
if (*pDay == 31)
{
(*pMonth)++;
*pDay = 1;
}
}
/**
*功能: 二月份增加一天
*参数说明:
*@pYear, @pMonth, @pDay 返回增加一天后的年月日
*/
void SpecialMonthAddOneDay(int *pYear, int *pMonth, int *pDay)
{
(*pDay)++;
if (IsLeapYear(*pYear) == 1) //是闰年
{
if (*pDay == 30)
{
(*pMonth)++;
*pDay = 1;
}
}
else
{
if (*pDay == 29)
{
(*pMonth)++;
*pDay = 1;
}
}
}
/**
*功能:根据出生年月日和出生后所过天数,计算当前日期
*参数说明:
*@days: 出生后所过天数
*@p_Result_year,@p_Result_month,@p_Result_month: 接收结果日期的年月日指针
*@born_year, @born_month, @born_day 出生年月日
*/
void GetResultDate(int days,int *p_Result_year, int *p_Result_month, int *p_Result_day, int born_year, int born_month, int born_day)
{
int i;
*p_Result_year = born_year;
*p_Result_month = born_month;
*p_Result_day = born_day;
for (i = 1;i < days;i++)
{
switch (*p_Result_month)
{
/*天数为31天的月份*/
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
BigMonthAddOneDay(p_Result_year, p_Result_month, p_Result_day);
break;
/*与闰年平年有关的二月份*/
case 2:
SpecialMonthAddOneDay(p_Result_year,p_Result_month, p_Result_day);
break;
/*天数为30天的月份*/
case 4:
case 6:
case 9:
case 11:
SmallMonthAddOneDay(p_Result_month, p_Result_day);
break;
}
}
}
int main(void)
{
int year = 1777, month = 4, day = 30;
int p_Result_year, p_Result_month, p_Result_day, days;
while (1)
{
printf("please input days:\n");
scanf("%d", &days);
GetResultDate(days, &p_Result_year, &p_Result_month, &p_Result_day, year, month, day);
printf("%d-%d-%d\n", p_Result_year, p_Result_month, p_Result_day);
}
return 0;
}
运行截图: