高斯日记

本文介绍了一种算法,用于解析著名数学家高斯独特的日记日期记录方式。高斯使用出生后的天数作为日记的日期标记,文章提供了一个C语言程序示例来计算具体的年月日。

大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?

高斯出生于:1777年4月30日。

在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113

请你算出高斯获得博士学位的年月日。

提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21

请严格按照格式,通过浏览器提交答案。

注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。


///////////// from shhider
#include"stdio.h"
int getDay(int days, int isRun){
	int per[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};	// 12个月,每月的天数
	per[1] = isRun ? 29 : 28; 
	int i = 0, m = 1, d = days;
	while( d>per[i] ){
		m++;
		d = d-per[i];
		i++;
	}
	return m*32+d;	// 方便一次返回“2个”数据 
}
int main(){
	int cir = 365*4+1;	// 4年一个周期
	int y = 1777, d;	// y是起始年份,d保存计算具体日期返回的数据 
	int n;
	scanf("%d", &n);
	n += 120;	// 把1777年已过去的日子也算上,方便之后计算日期; 
	y += (n/cir)*4;	// 得到年份区间,y~y+4之间 
	n =  n%cir;	// 可以确定在某4年内,闰年:y,n,n,n 
	if( n<=366 ){
		d = getDay(n, 1); 
	}else{
		n--;	// 把闰年多出的一天去掉 
		y += n/365;
		n %= 365;
		d = getDay(n, 0);
	}
	printf("%d-%d-%d", y, d/32, d%32);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值