程序代码:
/*大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日*/
#include <stdio.h>
void f(int n)
{
int ping[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }, //平年每个月天数
run[] = { 31,29,31,30,31,30,31,31,30,31,30,31 };//闰年每个月天数
int day, x = 1;
int i = 1777, j;
day = n + 31 + 28 + 31 + 30;//高斯出生于:1777年4月30日。把前4个月加起来方便比较
for (;; i++)
if (i % 100 != 0 && i % 4 == 0)//闰年
for (j = 0; j < 12; j++)
{
x += run[j];
if ((x < day) && (x + run[j + 1] >= day))
{
printf("%d 年 %d 月 %d 日\n", i, j + 2, day - x);
return;
}
}
else if (i % 100 == 0 && i % 400 == 0)//闰年
for (j = 0; j < 12; j++)
{
x += run[j];
if ((x<day) && (x + run[j + 1]>=day))
{
printf("%d 年 %d 月 %d 日\n", i, j + 2, day - x);
return;
}
}
else
for (j = 0; j < 12; j++)
{
x += ping[j];
if ((x<day) && (x + ping[j + 1]>=day))
{
printf("%d 年 %d 月 %d 日\n", i, j + 2, day - x);
return;
}
}
}
int main(void)
{
int n;
printf("Enter the day(出生当天为第1天): ");
scanf("%d", &n);
f(n);
return 0;
}