高斯日記
大數學家高斯有個好習慣:無論如何都要記日記。
他的日記有個與衆不同的地方,他從不注明年月日,而是用一個整數代替,比如:4210
後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒着主人:日子又過去一天,還有多少時光可以用于浪費呢?
高斯出生于:1777年4月30日。
在高斯發現的一個重要定理的日記上标注着:5343,是以可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上标着:8113
請你算出高斯獲得博士學位的年月日。
送出答案的格式是:yyyy-mm-dd, 例如:1980-03-21
請嚴格按照格式,通過浏覽器送出答案。
注意:隻送出這個日期,不要寫其它附加内容,比如:說明性的文字。
答案:
1799-7-16
題解:
判斷閏年。。。。寫代碼????手算????拉excel???用用VB秒掉。。。!!!
用代碼解決:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define INF 0x3f3f3f3f
#define ll long long
#define N 10010
#define M 1000000007
using namespace std;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{
int n;
int dd=246;
int i;
while(scanf("%d",&n)!=EOF) //輸入8113
//輸出:1799-7-16
{
int y=1777;
if(n<=245)
{
int k=5;
while(n>=30)
{
n-=a[k];
k++;
}
printf("%d-%d-%d\n",y,k,n);
}
else
{
n-=246;
y++;
while(n>=365)
{
if(y%4==0&&y%100!=0||y%400==0)
n-=366;
else
n-=365;
y++;
}
if(n>0)
{
for(i=1;i<13;i++)
{
if(y%4==0&&y%100!=0||y%400==0)
{
if(n>=29)
n-=b[i];
else
break;
}
else
{
if(n>=28)
n-=a[i];
else
break;
}
if(n==0)
n++;
}
printf("%d-%d-%d\n",y,i,n);
}
else
printf("%d-12-31\n",y);
}
}
return 0;
}
用VB解決: