自从注册后好久没有写过blog了,貌似自从毕业后随着年龄越来越大变得越来越懒了,这都转眼毕业两年了。。。

算了,废话少说,还是说正文吧。

“ 数学常数最令人着迷的就是,它们常常出现在一些看似与之毫不相干的场合中。 随便取一个 0 到 1 之间的数,再加上另一个 0 到 1 之间的随机数,然后再加上一个 0 到 1 之间的随机数⋯⋯直到和超过 1 为止。一个有趣的问题:平均需要加多少次,才能让和超过 1 呢?答案是 e 次

这是这篇Blog里面的一段话,原文是用Mathematica这个伟大的软件做的计算,但是呢,作为一个程序员,看到可以用程序实现的东西都按捺不住要写一写,所以就有了这么一篇文章。下面的代码是用C语言写成,环境是WIN XP XP3 + GCC 3.4.5 +NPP,几百行以内的程序实在是懒得开庞大的IDE,就这样凑合吧,呵呵

 

#include <stdio.h>
#include <stdlib.h>
#define NUM 9999999

int main()
{

int sum=0;
srand(time(NULL));
for (int i=0;i<NUM;i++)
	{
	double val=0;
	while(val <1)
	{
		val+=(rand()/(double)RAND_MAX);
		sum++;
	}
	}
printf("%f\n",sum/(double)NUM);
return 0;
}

 简单的来说程序就是统计了一下NUM次取数,共取了sum次,然后除一下,结果就出现了。

程序非常简单,写了十分钟不到,就不细解释了。

来看一下结果: