西西河

主题:【求助】由一个编程考试想到的 -- 东方射日

共:💬9 🌺8 新:
全看分页树展 · 主题
家园 【求助】由一个编程考试想到的

前两天有一个remote coding test,题目是:

Find the first 10 consecutive digits of the mathematical constant "e" for which every digit from 0-9 is present only once.

看这个题目,我马上上网搜到e的定义是自然数阶乘的倒数和的极限。有了这个定义,我大约花了两个小时编程,调试和优化,后来有了代码和结果。(有兴趣的可以给我发短消息,我可以给你发我的代码,看看还有没有优化空间)

// My result:

// The first place find 0 - 9 is begin at 1729 :

// 0719425863

我试了下效率还算满意,e计算到小数点后10000位在我那台烂机器(p4 2G, 512M : 不许笑!!)上也只用1秒左右。

发出去后,突然想到是不是可以也计算一下其他的无理数,例如根号2。那么应该有以下函数来精确计算一个正整数的平方根:

string sqrt(int n, int num)

// 返回n的平方根精确到小数点后num位

不过,平方根的计算我就捉瞎了,搜一下,找到例程:

  double Sqrt(double a,double p)//a是被开平方根数,p是所求精度

  {

   double x=1.0;

   double check;

   do{

   x=(a/x+x)/2.0;

   check=x*x-a;

   }while(check<-p || check>p);

   return x;

  }

有了这个迭代就好办了,反正用字符串来精确计算的代码上面已经有了。不过我的问题是:

以上红字部分:x=(a/x+x)/2.0;

是怎么来的?为什么?

立方根又如何计算了?

全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河