Greg Beech在这里说,他要求C#候选人生成一个计算PI的公式,因为可以使用函数\ $ 4 *(1-\ frac {1} {3} + \ frac {1} {5}-\ frac {1} {7} + \ dots)\ $。

我还没有准备好进行C#面试,但是我喜欢挑战。这是我尝试的公式。让我知道是否有更好的方法。

using System;

class MainApp 
{
    static void Main () 
    {
        double number = 0;
        double pi;
        int i = 1;

        do 
        {
            if ((i/2) % 2 == 0)
            {
                number += (double)(1) / i;
            }
            else
            {
                number -= (double)(1) / i;
            }
            pi = 4 * number;
            i += 2;
        } while (Math.Round(pi,5) != 3.14159);

        Console.Clear();
        Console.WriteLine("Pi can be found using the formula 4 * (1 - 1/3 + 1/5 - 1/7 + ...) with {0} iterations.\n" +
        "At this point 4 is multiplied by: {1} to get {2}\n" +
        "This Rounds up to: {3}",i,number,pi,Math.Round(pi,5));
        Console.ReadKey();
    }
}

评论

好像pi = 4 *数字;每个循环都是可以避免的步骤

循环正在搜索3.14159处的@paparazzi Pi。您的意思是循环应查找所需的修饰符(.785396 ...)吗?

将pi常数硬编码为pi逼近器对我来说似乎是作弊。一旦它们的前6位数字相同,我就会低估和高估并停止循环。

@Paparazzi这是算法缓慢收敛的一个弱点,即使将3.1415926535硬编码到程序中,您仍然会遇到相同的问题。无论哪种方式,6位数字都将立即有效。

这个问题有两个部分。 1)您能否编写一个循环,在每次迭代中添加下一个序列项?您已经证明可以做到这一点;您的代码很好。 2)对于所需的精度,您知道何时可以停止迭代吗?这是一个相对困难的问题(也许更有趣)。我同意您已经“欺骗”了= P,因为这只是为了好玩,所以我向您挑战,为第二个问题提出更好的解决方案。