Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
请问大数阶乘算法如何优化
ominous发起了问答2017-06-28
1
回复
568
浏览
static void Main(string[] args)
        {
            
                int maxLength = 10;
                int n;
                n = int.Parse(Console.ReadLine());
                int[] num = new int[maxLength];
                num[0] = 1;
                int i, j;
                int res = 0;
                int plus = 0;
                int flag = 1;
                for (i = 2; i <= n; i++)
                {
                    for (j = 1; j <= flag; j++)
                    {
                        if (flag > 0.9 * maxLength)
                        {
                            int[] b = new int[num.Length];
                            num.CopyTo(b, 0);
                            num = new int[maxLength * 2];
                            b.CopyTo(num, 0);
                            maxLength = maxLength * 2;
                        }
                        res = num[j - 1] * i + plus;
                        num[j - 1] = res % 10;
                        plus = res / 10;
                    }
                    while (plus > 0)
                    {
                        flag++;
                        num[flag - 1] = plus % 10;
                        plus = plus / 10;
                    }
                }



            string a;

            a = num[flag  - 1].ToString() +"."+ num[flag  - 2].ToString() + num[flag  - 3].ToString() + num[flag  - 4].ToString() + "E"+ "+" + (flag - 1).ToString();

            Console.WriteLine(a);
            Console.ReadKey();
            
        }

我写的这个算法计算大数时,计算时间非常长,请问可以如何优化一下呢?

所有回复
  • siki 2017-06-28

    没研究过大数的阶乘

    可以看下网上的这个实现 

    http://blog.csdn.net/snowdust/article/details/5392444

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!